【发布时间】:2014-08-13 21:06:14
【问题描述】:
我正在编写一个应用程序,以便可以使用手势在屏幕上旋转、调整大小和平移精灵(UIImageView 的子类)。我还希望能够对精灵应用 3D 透视变换。
我的旋转/调整大小/平移功能以及透视变换都可以正常工作。但是,它们似乎不能正确地协同工作。如果我旋转一个未修改的精灵,然后尝试倾斜它,精灵“重置”它的旋转,然后应用透视。反之亦然;如果我先倾斜,我可以在没有重置的情况下应用任何 2D 变换。
这是我正在使用的代码:(旋转、调整大小和平移使用 UIGestureRecognizers 完成,而倾斜使用 UISlider)。
旋转:
- (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;
}
调整大小:
- (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;
}
视角:
- (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;
}
谢谢!
【问题讨论】:
标签: ios objective-c cocoa-touch uiview core-animation