Определите, как сильно вращается CALayer
У меня есть программа, в которой 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);
}
}
Я начинаю со слоя, который нужно повернуть на определенное количество, чтобы соответствовать головоломке. Итак, как мне получить текущее вращение слоя?
Ответы
Ответ 1
Вы можете сделать математику и получить такой угол:
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 являются кодированием ключа и соблюдением соответствия