通过UIPanGestureRecognizer进行CATransform3DRotate级别

时间:2014-01-28 06:54:51

标签: core-animation uigesturerecognizer uipangesturerecognizer catransform3d catransform3drotate

我想让用户旋转我的一个视图。 当我按代码进行轮换时 - 使用此代码看起来效果最佳:

#define D2R(x) (x * (M_PI/180.0))
myLayer.transform = makePerspectiveTransform();
myLayer.transform = CATransform3DRotate(topPart.transform, D2R(65), 1, 0, 0);
 CATransform3D makePerspectiveTransform()
{
 CATransform3D transform = CATransform3DIdentity;
 transform.m34 = 1.0 / 800;
 return transform;
}

但我希望用户能够控制变换(最大值为D2R(65)。

我该怎么做?

更新

这是pan识别码:

- (void)rotate:(UIPanGestureRecognizer*)gesture 
{
    CGPoint velocity = [gesture velocityInView:self.view];
    if (velocity.x > 0 && degree < 45) {
        degree += 1;
        myLayer.transform = CATransform3DRotate(myLayer.transform, D2R(2/degree), 1, 0, 0);
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码既增加了添加到变换的旋转量,又将旋转应用于已旋转的视图变换。所以每次它从它停止的地方开始并且移动得更多。

不要对现有变换应用旋转。开始动画时,将起始变换保存到实例变量中。然后将您从平移手势计算的旋转值应用到ORIGINAL变换,并将其保存为视图的变换。