我正在通过从 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 值,则 View 会平滑旋转,但如果平移速度较快,即从识别器接收的值不连续,我会看到旋转中的跳跃(有点像层也在围绕它的旋转点平移一点)。无论平移是慢速还是快速,始终保持旋转平稳的方法是什么?
最佳答案
独立层具有隐式动画,只需更改属性即可自动发生。这就是你所看到的。当不断更新属性时,它看起来像图层滞后和落后。
如果您想在没有隐式动画的情况下更改属性,您可以在已禁用所有操作(动画的更通用名称)的事务中更改它:
[CATransaction begin];
[CATransaction setDisableActions:YES]; // no animations
myLayer.transform = newTransform;
[CATransaction commit];
您还可以通过将 NSNull
添加到该关键路径的 actions
字典中,将层配置为从不为给定的关键路径寻找动画:
myLayer.actions = @{
@"transform": [NSNull null] // never animate "transform"
};
关于ios - 使用平移手势识别器获得平滑旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827398/