使用平移手势识别器获得平滑旋转

时间:2014-11-09 10:54:56

标签: ios core-animation calayer uipangesturerecognizer catransform3d

我通过从UIPanGestureRecognizer获取输入来围绕y轴旋转CATransform3D层:

CGPoint movement = [recognizer translationInView:self];
CGFloat trackSpread = self.bounds.size.width;
CGFloat angle = (35 * abs(movement.x))/trackSpread;
transform = CATransform3DRotate(transform, degToRad(angle), 0, 1, 0);

如果平移缓慢完成,视图会平滑旋转,即从识别器接收连续的x值,但如果平移速度更快,即从识别器接收的值不连续,我会看到旋转中的跳跃(类似于图层)也围绕其旋转点进行了一点翻译)。无论平移是缓慢还是快速,总是保持旋转平稳的方法是什么?

1 个答案:

答案 0 :(得分:3)

独立图层具有仅通过更改属性自动发生的隐式动画。这就是你所看到的。当不断更新属性时,它看起来像是滞后并落后。

如果要在没有隐式动画的情况下更改属性,可以在禁用所有操作的事务中更改它(动画的更通用名称):

[CATransaction begin];
[CATransaction setDisableActions:YES]; // no animations
myLayer.transform = newTransform;
[CATransaction commit];

您还可以将图层配置为永远不会为给定的关键路径查找动画,方法是将NSNull添加到该关键路径的actions字典中:

myLayer.actions = @{
    @"transform": [NSNull null] // never animate "transform"
};