我有一个程序,其中必须将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);
}
}
我从一个必须旋转一定量以适应拼图的图层开始。那么如何获得图层的当前旋转?
答案 0 :(得分:20)
你可以做数学并得到这样的角度:
CATransform3D transform = _baseLayer.transform;
CGFloat angle = atan2(transform.m12, transform.m11);
但更容易做到如下:
CGFloat angle = [(NSNumber *)[_baseLayer valueForKeyPath:@"transform.rotation.z"] floatValue];
核心动画扩展了键值编码协议,允许通过关键路径获取和设置图层CATransform3D矩阵的公共值。表4描述了层的转换和sublayerTransform属性是键值编码和观察符合性的关键路径
答案 1 :(得分:0)
快速版本
let angle : CGFloat = atan2(layer.transform.m12, layer.transform.m11)