确定CALayer旋转了多少

问题描述 投票:11回答:2

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

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

ios calayer uigesturerecognizer
2个回答
20
投票

您可以进行数学运算并得到这样的角度:

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

但是更容易执行以下操作:

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

documentation

Core Animation扩展了键值编码协议,以允许通过键路径获取和设置图层的CATransform3D矩阵的公共值。表4描述了层的transform和sublayerTransform属性是键值编码和遵守观察的关键路径


0
投票

Swift版本

let angle : CGFloat = atan2(layer.transform.m12, layer.transform.m11)
© www.soinside.com 2019 - 2024. All rights reserved.