CALayer - анимация размера слоя блокирует запуск анимации - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть метод, в котором размещается группа слоев, и один «активированный» слой (в основном слой, на который нажал пользователь) одновременно позиционируется и изменяется. Все слои, включая активированный слой, являются подслоями большего слоя. Вот мой метод:

    [CATransaction begin];
    [CATransaction setValue:[NSNumber numberWithFloat:0.7]
                     forKey:kCATransactionAnimationDuration];
    }];
    for (CALayer *layer in self.inactiveLayers) {
       ... do some positioning ...
    }
    CGRect newFrame = activeLayer.frame;
    newFrame.origin.x = 50.0;
    newFrame.origin.y = 50.0;
    newFrame.size.width = 100.0;
    newFrame.size.height = 100.0;
    activeLayer.frame = newFrame;
    [CATransaction commit];

Проблема, с которой я столкнулся, действительно странная. Используя приведенный выше код, ни одна из анимаций не запускается (даже анимации для неактивных слоев). Но как только я закомментирую строки, задающие размер и ширину нового кадра, анимация снова волшебным образом начнет работать.

Есть ли причина, по которой это должно происходить?

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Выяснил проблему, у меня был установлен менеджер раскладки на суперслое слоев, которые я пытался анимировать, и код компоновки (который сбрасывал размеры слоев) вызывался при изменении границ слоев. Отключение диспетчера раскладки на время анимации решило проблему.

0 голосов
/ 17 декабря 2010

Это потому, что свойство кадра CAlayer не является анимируемым. Вместо этого используйте свойство bounds, и анимация положения будет работать без заминки.

...