确定一个CALayer旋转了多less

我有一个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); } } 

我从一个图层开始,必须旋转一定的数量来适应一个难题。 那么如何获得图层的当前旋转呢?

你可以做math,并得到这样的angular度:

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

但做起来更容易,如下所示:

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

从文档 :

Core Animation扩展了键值编码协议,允许通过关键path获取和设置图层的CATransform3Dmatrix的公共值。 表4描述了图层的transform和sublayerTransform属性是关键值编码和观察兼容的关键path