gpt4 book ai didi

swift - 沿椭圆形 UIBezierPath 为 CAShapeLayer 设置动画

转载 作者:行者123 更新时间:2023-12-03 19:25:37 25 4
gpt4 key购买 nike

我正在尝试为 CAShapeLayer 设置动画沿UIBezierPath .这在圆形路径情况下工作正常,但在我使用椭圆路径时则不然。动画确实发生了,但每次完成一轮时都会暂停一小段时间,而我没有设置延迟。

改变大小和时间似乎并没有改善这个问题,但会使暂停更长/更短。例如,在下面的动画中将持续时间设置为 1,暂停变得非常短(与沿路径旋转的加速一致)。

这是路径:

let ovalPath = UIBezierPath(ovalIn: CGRect(x: -25, y: -50, width: 50, height: 100))
ovalPath.apply(CGAffineTransform(rotationAngle: 45 * .pi / 180))
ovalPath.apply(CGAffineTransform(translationX: frame.size.width / 2, y: frame.size.height / 2))

使用它的 ShapeLayer:
let ovalLayer = CAShapeLayer()
ovalLayer.strokeColor = UIColor.lightGray.cgColor
ovalLayer.fillColor = UIColor.clear.cgColor
ovalLayer.path = ovalPath.cgPath
view.layer.addSublayer(ovalLayer)

这显示了倾斜 45 度的椭圆形路径。这是我设置动画的方式:
let animation = CAKeyframeAnimation(keyPath: #keyPath(CALayer.position))
animation.duration = 5
animation.repeatCount = MAXFLOAT
animation.path = ovalPath.cgPath

最后是路径后的形状:
let objectPath = UIBezierPath(arcCenter: CGPoint(x: 0 ,y: 0), radius: 50, startAngle: CGFloat(0), endAngle:CGFloat(Double.pi * 2), clockwise: true)
let objectLayer = CAShapeLayer()
objectLayer.path = objectPath.cgPath
objectLayer.strokeColor = UIColor.darkGray.cgColor
objectLayer.fillColor = UIColor.darkGray.cgColor
view.layer.addSublayer(objectLayer)
objectLayer.add(animation, forKey: nil)

我希望它无限循环而不暂停(在圆形路径中完全如此)。我错过了一些明显的东西吗?

编辑:尝试使用 timingFunction如下:
animation.timingFunction = CAMediaTimingFunction(name: <CAMediaTimingFunctionName>)

例如:
animation.timingFunction = CAMediaTimingFunction(name: .default)

编辑2:

这是它目前的样子。动画从右下角开始。两个椭圆的代码完全相同,除了动画持续时间(1 对 5 秒)

enter image description here

最佳答案

这是一个解决方案(跳转只是gif动画结束)。使用 Xcode 11.4/iOS 13.4 测试

demo

let animation = CAKeyframeAnimation(keyPath: #keyPath(CALayer.position))
animation.duration = 5
animation.repeatCount = .greatestFiniteMagnitude // just recommended by Apple
animation.path = ovalPath.cgPath
animation.calculationMode = .paced // << required !!

关于swift - 沿椭圆形 UIBezierPath 为 CAShapeLayer 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57497188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com