确定CALayer旋转了多少

时间:2012-03-14 23:59:10

标签: ios calayer uigesturerecognizer

我有一个程序,其中必须将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);
    }
}

我从一个必须旋转一定量以适应拼图的图层开始。那么如何获得图层的当前旋转?

2 个答案:

答案 0 :(得分:20)

你可以做数学并得到这样的角度:

CATransform3D transform = _baseLayer.transform;
CGFloat angle = atan2(transform.m12, transform.m11);

但更容易做到如下:

CGFloat angle = [(NSNumber *)[_baseLayer valueForKeyPath:@"transform.rotation.z"] floatValue];

来自documentation

  

核心动画扩展了键值编码协议,允许通过关键路径获取和设置图层CATransform3D矩阵的公共值。表4描述了层的转换和sublayerTransform属性是键值编码和观察符合性的关键路径

答案 1 :(得分:0)

快速版本

let angle : CGFloat = atan2(layer.transform.m12, layer.transform.m11)