Как я могу узнать значения в CABasicAnimation keyPath - PullRequest
21 голосов
/ 28 марта 2011

Я нахожу некоторый код, подобный этому:

CABasicAnimation *anim = [CABasicAnimation animation];
anim.keyPath = @"transform.scale";
anim.fromValue = [NSNumber numberWithFloat:1.0];
anim.toValue = [NSNumber numberWithFloat:0];
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeBoth;
anim.delegate = self;
[self.view.layer addAnimation:anim forKey:@"scaleOut"];

и

anim.keyPath = @"transform.rotation.x";

Насколько я знаю, keyPath является вызовом метода с цепочкой.«transform.scale» для CALayer - это aLayer.transform.scale.«transform» является свойством CALayer, «scale» является «свойством» transform.Но свойство transform в CALayer - это CATransform3D.

В CATransform3D нет свойства с именем «scale» или «axis».

У меня такой вопрос: как keyPath идентифицирует «масштаб» и «вращение»?

Ответы [ 2 ]

25 голосов
/ 28 марта 2011

Базовая анимация расширяет KVC для поддержки прямой адресации полей (или псевдополей) некоторых структурных свойств слоев.Функция описана в Расширения базовой анимации для кодирования значения ключа .

10 голосов
/ 14 февраля 2018

Я не уверен, но я нашел решение, которое могло бы помочь.

В SWIFT: Вместо записи строки вы можете использовать это:

let shadowAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.shadowRadius))

Когда вы набираете CALayer. <- автозаполнение должно дать вам доступные keyPaths. </p>

Надеюсь, это поможет.

...