12

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

像这个:

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

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

4

6 回答 6

22

以下是主要animationWithKeyPath价值。

动画WithKeyPath

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

于 2012-12-17T11:27:31.443 回答
9

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

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)

图层

  • 锚点CGPoint
  • 背景颜色:CGColor?
  • 背景过滤器:[CIFilter]?(使用默认 CATransition,过滤器的子属性使用默认 CABasicAnimation 进行动画处理)
  • 边框颜色:CGColor?
  • 边框宽度CGFloat
  • 界限CGRect
  • 合成过滤器:CIFilter?(使用默认 CATransition,过滤器的子属性使用默认 CABasicAnimation 进行动画处理)
  • 内容CGImage?
  • 内容矩形:CGRect
  • 角半径CGFloat
  • doubleSided : Bool(无默认动画)
  • 过滤器:__[CIFilter]?(使用默认 CATransition,过滤器的子属性使用默认 CABasicAnimation 进行动画处理)
  • 框架CGRect(!!不可动画!使用边界和位置)
  • 隐藏布尔
  • 面具CALayer?
  • maskToBounds :布尔
  • 不透明度浮动(0 <= 不透明度 <= 1)
  • 位置CGPoint
  • 阴影颜色:CGColor
  • shadowOffset : CGSize (默认为 (0,-3))
  • shadowOpacity :浮点数(0 <= shadowOpacity <= 1)
  • 阴影路径:CGPath
  • shadowRadius : CGFloat (默认为 3)
  • 子层[CALayer]?
  • 子层变换:CATransform3D
  • 变换CATransform3D
  • zPosition : CGFloat

CALayer 默认隐含 CABasicAnimation**:duration = 0.25s 或当前事务的持续时间。
CALayer 默认隐含 CATransition**:持续时间= 0.25s 或当前事务的持续时间,类型 = kCATransitionFade,开始进度 = 0,结束进度 = 1

CIFilter(仅限 macOS)

  • 名称字符串
  • 启用布尔

CATransform3D

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

CG点

  • x : CGF浮动
  • y : CGF浮动

CGS尺寸

  • 宽度CGFloat
  • 高度CGF浮动

CG矩形

  • 原点CGPoint
  • origin.x : CGFloat
  • origin.y : CGFloat
  • 尺寸CGSize
  • size.width : CGFloat
  • size.height : CGFloat
于 2018-04-25T18:40:49.263 回答
6

你可以简单地写: 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
    }
}

XCode 外观


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"
    }
}
于 2019-01-21T20:37:31.403 回答
3

您可以在CoreAnimation 编程指南的“结构字段的关键路径支持”部分找到它们

于 2012-12-17T11:22:39.683 回答
1

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

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

于 2012-12-17T11:23:47.920 回答