ios - 为什么核心动画类型采用字符串键路径?

标签 ios swift core-animation

当为 CALayer 上的特定属性设置动画时,我很困惑为什么 keyPath 是一个字符串。使用枚举不是更好更安全吗?只是想知道输入字符串文字的优势。

示例:let flash = CASSpringAnimation(keyPath: "borderColor")

最佳答案

虽然 Josh Homann 的回答非常有帮助,但同样值得注意的是,在这种情况下没有可以工作的特定枚举。 CASpringAnimation 可以应用于任何属性,而不仅仅是内置属性。甚至“内置”也是一种误导,因为有许多内置的 CALayer 子类,它们本身具有不同的属性。动画甚至不必应用于层(SceneKit 也使用它们)。如果您将自定义属性添加到图层,并希望使用 Spring 动画对其进行动画处理,那么如果这是一个枚举,那将是不可能的。

也就是说,你可以做得比在这里传递一个字符串(甚至是一个字符串常量)更好。您可以使用 #keyPath:

let flash = CASpringAnimation(keyPath: #keyPath(CALayer.borderColor))

这提供了编译时检查是否确实定义了此方法。这实现了您使用枚举寻找的大部分目标,同时足够灵活以处理任何目标和属性。

在未来,希望 Core Animation 能够接受新的 Swift 4“KeyPath”类型,您将能够做到这一点:

let flash = CASpringAnimation(keyPath: \CALayer.borderColor)

关于ios - 为什么核心动画类型采用字符串键路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533173/

相关文章:

swift - 传递直接引用或闭包

ios - AVAudioRecorder currentTime 给出错误的值

ios - 在 View Controller 之间传递数据

ios - 像标准功能 ios objective c 中那样旋转图像

ios - 在 iOS/Swift 应用程序中跟踪时间/日期的最有效方法是什么?

iphone - 在 -[CALayer setNeedsDisplayInRect :] 中禁用隐式动画

ios - 用切出的圆圈遮盖 UIView

objective-c - iOS 中的动画背景

objective-c - 在 ARC 下,我的代码变慢了,这正常吗?

ios - 背景图像不会在 iPhone 和 iPad 上调整大小。没有任何效果