【问题标题】:CATransform3DRotate level by UIPanGestureRecognizerUIPanGestureRecognizer 的 CATransform3DRotate 级别
【发布时间】:2014-01-28 06:54:51
【问题描述】:

我想让用户旋转我的视图之一。 当我通过代码进行旋转时 - 使用此代码看起来最好:

#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)。

我该怎么做?

更新

这是泛识别码:

- (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);
    }
}

【问题讨论】:

  • 使用某个值(比如平移的总平移)作为创建变换的代码的参数(角度)?
  • 问题是我做的每一个额外的转换(在平移的时候)都应用在已经转换的视图上。因此,平移手势持续的时间越长,动画就越快​​。
  • 你能展示一下你是怎么做到的吗? (对平移做出反应并改变变换)
  • - (void)rotate:(UIPanGestureRecognizer*)gesture { CGPoint velocity = [gesture velocityInView:self.view]; if (velocity.x > 0 && degree
  • 仅供参考:您可以编辑您的问题并提供更多信息(而不是添加 cmets)。这次我给你做了,下次你可以直接自己做;)

标签: core-animation uigesturerecognizer uipangesturerecognizer catransform3d catransform3drotate


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多