如何在 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")
非常感谢。
您应该使用 CABasicAnimation
的 timingFunction
属性。有一个构造函数接受 these 预定义的计时函数,例如
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
问题是线条动画似乎开始了四分之一的方式。我忽略了在我的问题中放置后来证明是有问题的代码行。
shapeLayer.lineCap = kCALineCapRound
这与 lineWidth 100 相结合,使线条从开头大约四分之一处开始。我把 lineWidth 变小了,效果很好。
我在 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")
非常感谢。
您应该使用 CABasicAnimation
的 timingFunction
属性。有一个构造函数接受 these 预定义的计时函数,例如
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
问题是线条动画似乎开始了四分之一的方式。我忽略了在我的问题中放置后来证明是有问题的代码行。
shapeLayer.lineCap = kCALineCapRound
这与 lineWidth 100 相结合,使线条从开头大约四分之一处开始。我把 lineWidth 变小了,效果很好。