Определите, сколько CALayer повернул - PullRequest
11 голосов
/ 15 марта 2012

У меня есть программа, в которой 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 Ответ

20 голосов
/ 15 марта 2012

Вы можете сделать математику и получить угол следующим образом:

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

Но это проще сделать следующим образом:

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

Из документация :

Базовая анимация расширяет протокол кодирования значения ключа, позволяя получать и задавать общие значения матрицы CATransform3D уровня по ключевым путям.Таблица 4 описывает ключевые пути, для которых свойства transform и sublayerTransform слоя соответствуют кодированию значения ключа и соблюдают его

...