我想知道使用的所有可能的键是什么CABasicAnimation
像这个:
CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
这使得旋转......我在哪里可以找到所有可能的钥匙?并感谢转发
我想知道使用的所有可能的键是什么CABasicAnimation
像这个:
CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
这使得旋转......我在哪里可以找到所有可能的钥匙?并感谢转发
以下是主要animationWithKeyPath
价值。
在对其中一个答案的评论中提到了此来源,但希望将来发现此问题的人可以接受此来源,截至发布日期的正确列表是苹果文档上的此页面:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AnimatableProperties/AnimatableProperties.html https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/Key -ValueCodingExtensions/键-ValueCodingExtensions.html
以下是这些链接中列出的关键路径:
(除非另有说明,CALayer 属性使用默认的 CABasicAnimation)
CALayer 默认隐含 CABasicAnimation**:duration = 0.25s 或当前事务的持续时间。
CALayer 默认隐含 CATransition**:持续时间= 0.25s 或当前事务的持续时间,类型 = kCATransitionFade,开始进度 = 0,结束进度 = 1
你可以简单地写: CABasicAnimation(keyPath: #keyPath(CAShapeLayer.strokeColor))
此外,使用 command+shift+o,打开例如 CALayer.h 并观看评论。**Apple 团队提供有关动画功能的信息
对于动画键:
====漂亮的包装器;用法示例====
请回复这条关于错误的消息,如果你会看到
extension CABasicAnimation {
convenience init(_ key: CAPropertyAnimation.Key, duration: Double) {
self.init(keyPath: key.keyPath)
self.duration = duration
}
}
extension CAPropertyAnimation {
enum Key {
/// `CALayer` in the `Parent` layer for `Subclass layers`. Able to use this keys for animating `Subclass layers`
case caLayer(_ property: CALayer.CALayerAnimatableProperty)
case shapeLayer(_ property: CAShapeLayer.AnimatableProperty)
case emitterLayer(_ property: CAEmitterLayer.AnimatableProperty)
case gradientLayer(_ property: CAGradientLayer.AnimatableProperty)
case replicationLayer(_ property: CAReplicatorLayer.AnimatableProperty)
case textLayer(_ property: CATextLayer.AnimatableProperty)
var keyPath: String {
switch self {
case .caLayer(let property): return property.rawValue
case .shapeLayer(let property): return property.rawValue
case .emitterLayer(let property): return property.rawValue
case .gradientLayer(let property): return property.rawValue
case .replicationLayer(let property): return property.rawValue
case .textLayer(let property): return property.rawValue
}
}
}
}
extension CALayer {
/**
- references:
[Apple. Key-Value Coding Extensions (CALayer examples)](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/Key-ValueCodingExtensions/Key-ValueCodingExtensions.html#//apple_ref/doc/uid/TP40004514-CH12-SW2)
[Apple. Animatable Properties.](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/AnimatableProperties/AnimatableProperties.html)
[Stack overflow 1](https://stackoverflow.com/questions/44230796/what-is-the-full-keypath-list-for-cabasicanimation)
[Stack overflow 2](https://stackoverflow.com/questions/13913101/cabasicanimation-keys)
*/
enum CALayerAnimatableProperty: String {
/// CGPoint
case anchorPoint = "anchorPoint"
/// CGPoint
case anchorPointZ = "anchorPointZ"
/// CGColor?
case backgroundColor = "backgroundColor"
/// [CIFilter]? (uses default CATransition, sub-properties of filters are animated using default CABasicAnimation)
case backgroundFilters = "backgroundFilters"
/// CGColor?
case borderColor = "borderColor"
/// CGFloat
case borderWidth = "borderWidth"
/// CGRect
case bounds = "bounds"
/// CGpoint
case boundsOrigin = "bounds.origin"
/// CGFloat
case boundsOriginX = "bounds.origin.x"
/// CGFloat
case boundsOriginY = "bounds.origin.y"
/// CGSize
case boundsSize = "bounds.size"
/// CGFloat
case boundsWidth = "bounds.size.width"
/// CGFloat
case boundsHeight = "bounds.size.height"
/// CIFilter? (uses default CATransition, sub-properties of filters are animated using default CABasicAnimation)
case compositingFilter = "compositingFilter"
/// typically a CGImageRef, but may be something else
case contents = "contents"
/// CGRect
case contentsRect = "contentsRect"
/// CGFloat
case contentsScale = "contentsScale"
/// CGRect
case contentsCenter = "contentsCenter"
/// CGFloat
case cornerRadius = "cornerRadius"
/// Bool (no default animation)
case doubleSided = "doubleSided"
/// [CIFilter]? (uses default CATransition, sub-properties of filters are animated using default CABasicAnimation)
case filters = "filters"
/// CGRect (!!not animatable!! use bounds and position)
case frame = "frame"
/// Bool
case hidden = "hidden"
/// Bool
case masksToBounds = "masksToBounds"
/// Float
case minificationFilterBias = "minificationFilterBias"
/// Float (0 <= opacity <= 1)
case opacity = "opacity"
/// CGPoint
case position = "position"
/// CGFloat
case positionX = "position.x"
/// CGFloat
case positionY = "position.y"
/// CGFloat
case rotationX = "transform.rotation.x"
/// CGFloat
case rotationY = "transform.rotation.y"
/// CGFloat
case rotationZ = "transform.rotation.z"
/// CGFloat
case scale = "transform.scale"
/// CGFloat
case scaleX = "transform.scale.x"
/// CGFloat
case scaleY = "transform.scale.y"
/// CGFloat
case scaleZ = "transform.scale.z"
/// CGColor?
case shadowColor = "shadowColor"
/// CGSize (default is (0,-3))
case shadowOffset = "shadowOffset"
/// Float (0 <= shadowOpacity <= 1); default is 0
case shadowOpacity = "shadowOpacity"
/// CGpath?
case shadowPath = "shadowPath"
/// CGFloat (default is 3)
case shadowRadius = "shadowRadius"
/// [CALayer]?
case sublayers = "sublayers"
/// Bool
case shouldRasterize = "shouldRasterize"
/// CGFloat
case rasterizationScale = "rasterizationScale"
/// CATransform3D
case sublayerTransform = "sublayerTransform"
/// CGSize
case translation = "transform.translation"
/// CGFloat
case translationX = "transform.translation.x"
/// CGFloat
case translationY = "transform.translation.y"
/// CGFloat
case translationZ = "transform.translation.z"
/// CATransform3D
case transform = "transform"
/// CGFloat
case zPosition = "zPosition"
}
}
extension CAShapeLayer {
enum AnimatableProperty: String {
/// CGColor?
case fillColor = "fillColor"
/// [NSNumber]?
case lineDashPhase = "lineDashPhase"
/// CGFloat
case lineWidth = "lineWidth"
/// CGFloat
case miterLimit = "miterLimit"
/// CGColor?
case strokeColor = "strokeColor"
/// CGFloat
case strokeStart = "strokeStart"
/// CGFloat
case strokeEnd = "strokeEnd"
}
}
extension CAEmitterLayer {
enum AnimatableProperty: String {
/// CGPoint
case emitterPosition = "emitterPosition"
/// CGFloat
case emitterZPosition = "emitterZPosition"
/// CGSize
case emitterSize = "emitterSize"
}
}
extension CAGradientLayer {
enum AnimatableProperty: String {
/// [CGColor]? ([Any]? by Apple docs, but CGColor works as well)
case colors = "colors"
/// [NSNuber]?
case locations = "locations"
/// CGPoint
case endPoint = "endPoint"
/// CGPoint
case startPoint = "startPoint"
}
}
extension CAReplicatorLayer {
enum AnimatableProperty: String {
/// CFTimeInterval (Double)
case instanceDelay = "instanceDelay"
/// CATransform3D
case instanceTransform = "instanceTransform"
/// Float
case instanceRedOffset = "instanceRedOffset"
/// Float
case instanceGreenOffset = "instanceGreenOffset"
/// Float
case instanceBlueOffset = "instanceBlueOffset"
/// Float
case instanceAlphaOffset = "instanceAlphaOffset"
}
}
extension CATextLayer {
enum AnimatableProperty: String {
/// CGSize
case fontSize = "fontSize"
/// CGColor?
case foregroundColor = "foregroundColor"
}
}
您可以在CoreAnimation 编程指南的“结构字段的关键路径支持”部分找到它们
您基本上可以使用所有可能的keyPath。因此,如果一个对象实现了属性“alpha”,就像所有视图一样,你可以让这个属性自动动画。
然后 CAAnimation 计算动画起点和终点之间的步长,设置它们并重绘视图。
您是否考虑过查找 CABasicAnimation 及其相应超类的类参考?
CABasicAnimation: https ://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CABasicAnimation_class/Introduction/Introduction.html
CAPropertyAnimation https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAPropertyAnimation_class/Introduction/Introduction.html#//apple_ref/occ/cl/CAPropertyAnimation