我有一个程序,其中必须将CALayer旋转到某个值。如何确定CALayer的当前旋转角度?我有一个UIRotationGestureRecognizer可以旋转图层:
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer == rotationGestureRecognizer) {
NSLog(@"gestureRecRotation: %f", rotationGestureRecognizer.rotation);
CATransform3D current = _baseLayer.transform;
_baseLayer.transform = CATransform3DRotate(current, rotationGestureRecognizer.rotation * M_PI / 180, 0, 0, 1.0);
}
}
我从一个必须旋转一定量的层开始以适合拼图。那么如何获取图层的当前旋转度?
您可以进行数学运算并得到这样的角度:
CATransform3D transform = _baseLayer.transform;
CGFloat angle = atan2(transform.m12, transform.m11);
但是更容易执行以下操作:
CGFloat angle = [(NSNumber *)[_baseLayer valueForKeyPath:@"transform.rotation.z"] floatValue];
Core Animation扩展了键值编码协议,以允许通过键路径获取和设置图层的CATransform3D矩阵的公共值。表4描述了层的transform和sublayerTransform属性是键值编码和遵守观察的关键路径
Swift版本
let angle : CGFloat = atan2(layer.transform.m12, layer.transform.m11)