21

我发现一些这样的代码:

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 是一个链式方法调用。CALayer 的“transform.scale”是 aLayer.transform.scale。“transform”是 CALayer 的属性,“scale”是 transform 的“属性”。但是 CALayer 中的属性变换是 CATransform3D。

CATransform3D 中没有名为“scale”或“rotation”的属性。

我的问题是: keyPath 如何识别“缩放”和“旋转”?

4

2 回答 2

28

Core Animation 扩展了 KVC 以支持直接寻址层的某些结构类型属性的字段(或伪字段)。该功能在Core Animation Extensions To Key-Value Coding中进行了描述。

于 2011-03-28T13:37:53.577 回答
13

我不确定,但我找到了一个可能会有所帮助的解决方案。

在 SWIFT 中: 您可以使用以下命令,而不是编写字符串:

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

当您键入 CALayer 时。<- 自动完成应该给你可用的 keyPaths。

我希望这有帮助。

于 2018-02-14T16:53:35.323 回答