ios - Combining a UIView perspective transform with other CATranform3Ds -
i'm writing app such sprites (subclasses of uiimageview) can rotated, resized, , panned across screen using gestures. able apply 3d perspective transformation sprites.
i have rotate/resize/pan functionality working correctly, perspective transform. however, don't seem work correctly. if rotate unmodified sprite, seek skew it, sprite 'resets' it's rotation, applies perspective. opposite works though; if skew first, can apply 2d transformation after without resetting.
here code i'm using: (rotate, resize, , pan done using uigesturerecognizers, whereas skew uses uislider).
rotate:
- (void)didrotatesprite:(uirotationgesturerecognizer *)rotate { cgfloat angle = rotate.rotation; catransform3d transform = catransform3didentity; transform = catransform3drotate(spriteview.layer.transform, angle, 0, 0, 1); spriteview.layer.transform = transform; rotate.rotation = 0.0; } resize:
- (void)didpinchsprite:(uipinchgesturerecognizer *)pinch { cgfloat scale = pinch.scale; catransform3d transform = catransform3didentity; transform = catransform3dscale(spriteview.layer.transform, scale, scale, 1); view.layer.transform = transform; pinch.scale = 1.0; } perspective:
- (ibaction)perspectivechanged:(uislider *)slider { catransform3d transform = catransform3didentity; transform.m34 = 1.0 / -100; transform = catransform3drotate(transform, (1 - (slider.value * 2)) * m_pi_2, 1, 0, 0); spriteview.layer.transform = transform; } thank you!
found reply lot of debugging , help of this question. trick transform view's perspective using:
spriteview.superview.layer.sublayertransform = transform;
this recursively applies transformation view's superview , subviews contained in it. more info this, check out documentation , apple's layer style properties guide too.
ios objective-c cocoa-touch uiview core-animation
No comments:
Post a Comment