如何在 CAAnimation 中使用 UIViewAnimationCurve 选项

How to use UIViewAnimationCurve options in CAAnimation

我在 CAShapeLayer 中使用 CAAnimation 来简单地为一条从左向右划动的线条设置动画(它只是一个更复杂程序的简化版本)。我放慢了它的速度,以表明开始的四分之一几乎是瞬时的,然后其余部分正常动画。

我看到可以使用 UIView.animate 的选项来设置 UIViewAnimationCurve 选项(例如,.EaseIn 或 .Linear)。在 CAShapeLayer 中嵌入 CAAnimation 时是否可以设置这些选项?是不是每次想 运行 都需要创建动画,还是有 "run animation" 命令?

下面是我的截取代码:

    // the containing UIView is called mainView

    mainView.layer.sublayers = nil

    // create a line using a UIBezierPath

    let path = UIBezierPath()
    path.move(to: CGPoint(x: 100, y: 100))
    path.addLine(to: CGPoint(x: 300, y: 100))

    // create a CAShapeLayer

    let shapeLayer = CAShapeLayer()
    shapeLayer.frame = CGRect(x: 0, y: 0, width: 1024, height: 1024)
    shapeLayer.strokeColor = UIColor.green.cgColor
    shapeLayer.lineWidth = 100
    shapeLayer.path = path.cgPath

    // create the animation

    mainView.layer.addSublayer(shapeLayer)
    let animation = CABasicAnimation(keyPath: "LetterStroke")

    animation.fromValue = 0
    animation.toValue = 1
    animation.duration = 10

    shapeLayer.add(animation, forKey: "animation")

非常感谢。

您应该使用 CABasicAnimationtimingFunction 属性。有一个构造函数接受 these 预定义的计时函数,例如

 animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)

问题是线条动画似乎开始了四分之一的方式。我忽略了在我的问题中放置后来证明是有问题的代码行。

shapeLayer.lineCap = kCALineCapRound

这与 lineWidth 100 相结合,使线条从开头大约四分之一处开始。我把 lineWidth 变小了,效果很好。