【问题标题】:CABasicAnimation keysCABasicAnimation 键
【发布时间】:2012-12-04 11:40:23
【问题描述】:

我想知道CABasicAnimation 中使用的所有可能键是什么

喜欢这个:

CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

这使得旋转......我在哪里可以找到所有可能的键? 并感谢转发

【问题讨论】:

标签: iphone objective-c ios xcode ipad


【解决方案1】:

以下是主要的animationWithKeyPath 值。

参考http://www.adamzucchi.com/blog/?p=24

【讨论】:

    【解决方案2】:

    在对其中一个答案的评论中提到了此来源,但希望将来发现此问题的人可以接受此来源,截至发布日期的正确列表是苹果的此页面文档:

    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/Key-ValueCodingExtensions.html

    以下是这些链接中列出的关键路径:

    (除非另有说明,CALayer 属性使用默认的 CABasicAnimation)

    CALayer

    • 锚点:CGPoint
    • backgroundColor:CGColor?
    • backgroundFilters:[CIFilter]?(使用默认 CATransition,过滤器的子属性使用默认 CABasicAnimation 进行动画处理)
    • borderColor:CGColor?
    • borderWidth:CGFloat
    • 界限:CGRect
    • compositingFilter:CIFilter?(使用默认 CATransition,过滤器的子属性使用默认 CABasicAnimation 进行动画处理)
    • 内容:CGImage?
    • contentsRect:CGRect
    • cornerRadius:CGFloat
    • doubleSided:Bool(无默认动画)
    • 过滤器:__[CIFilter]? (使用默认 CATransition,过滤器的子属性使用默认 CABasicAnimation 进行动画处理)
    • 帧:CGRect(!!不可动画!使用边界和位置)
    • 隐藏:布尔
    • 掩码:CALayer?
    • ma​​sksToBounds:布尔值
    • 不透明度:浮动(0
    • 位置:CGPoint
    • shadowColor:CGColor?
    • shadowOffset:CGSize(默认为 (0,-3))
    • shadowOpacity:Float (0
    • shadowPath:CGPath?
    • shadowRadius:CGFloat(默认为 3)
    • 子层:[CALayer]?
    • sublayerTransform:CATransform3D
    • 变换:CATransform3D
    • zPosition:CGFloat

    CALayer 默认隐含 CABasicAnimation**:持续时间 = 0.25 秒或当前事务的持续时间。
    CALayer 默认隐含 CATransition**:duration = 0.25s 或当前事务的持续时间,type = kCATransitionFade, start progress = 0, end progress = 1

    CIFilter(仅限 macOS)

    • 名称:字符串
    • 启用:布尔

    CATransform3D

    • rotation.x:NSNumber(弧度)
    • rotation.y:NSNumber(弧度)
    • rotation.z:NSNumber(弧度)
    • rotation:NSNumber(弧度)(与 rotation.z 相同)
    • scale.x:NSNumber
    • scale.y:NSNumber
    • scale.z:NSNumber
    • scale:NSNumber(所有三个比例因子的平均值)
    • translation.x:NSNumber
    • translation.y:NSNumber
    • translation.z:NSNumber
    • 翻译:NSValue包含 NSSize 或 CGSize

    CGPoint

    • x:CGFloat
    • y:CGFloat

    CGSize

    • 宽度:CGFloat
    • 高度:CGFloat

    CGRect

    • 原点:CGPoint
    • origin.x:CGFloat
    • origin.y:CGFloat
    • 尺寸:CGSize
    • size.width:CGFloat
    • size.height:CGFloat

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • @juanjo 已修复。在潜伏了很长一段时间后,仍然对参与 Stack Overflow 有一定的了解:)
    • 这应该是公认的答案。
    【解决方案3】:

    你可以简单地写成:CABasicAnimation(keyPath: #keyPath(CAShapeLayer.strokeColor))

    另外,使用 command+shift+o,打开例如 CALayer.h 并观看 cmets。 **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"
        }
    }
    

    【讨论】:

      【解决方案4】:

      您可以在 CoreAnimation 编程指南的"Key Path Support for Structure Fields" 部分找到它们

      【解决方案5】:

      您基本上可以使用所有可能的keyPath。 因此,如果一个对象实现了属性“alpha”,就像所有视图一样,你可以让这个属性自动动画。

      CAAnimation 然后计算动画起点和终点之间的步长,设置它们并重绘视图。

      【讨论】:

      • 这个链接现在失效了:(
      • @Lewis42 我的回答中没有链接;)
      【解决方案6】:

      【讨论】:

      • 我根本看不到动画支持的关键路径的具体列表。
      • 这些页面没有提供可能的 keyPath 值的列表。
      • 我无法在链接的页面上找到这些关键路径的列表。也许我没有正确导航这些页面。如果您能找到一个列表并更新答案,我将不胜感激并给予支持。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      相关资源
      最近更新 更多