我有一个看起来很棒的CAKeyframeAnimation,但是当设备旋转时,与其他内容相比,animate当然不合适。有没有办法调整(缩放)正在进行的动画的路径?
编辑:添加代码
let circle = CAShapeLayer()
circle.path = UIBezierPath(roundedRect: CGRect(x: -60.0, y: -60.0, width: 100.0, height: 100.0), cornerRadius: 50.0).cgPath
circle.fillColor = UIColor.clear.cgColor
circle.strokeColor = UIColor.blue.cgColor
let animation = CAKeyframeAnimation(keyPath: "position")
animation.duration = (path["endTime"] as! Double) - (path["startTime"] as! Double)
animation.repeatCount = 0
animation.path = (path as! UIBezierPath).cgPath
animation.calculationMode = kCAAnimationPaced
animation.fillMode = kCAFillModeForwards
animation.isRemovedOnCompletion = false
circle.add(animation, forKey: "position")
self.view.layer.insertSublayer(circle, at: 5)
问题在于UIBezierPath是在纵向或横向中定义的(应用程序支持两者),因此以与创建它相同的方向进行回放没有问题,但是如果您旋转设备,UIBezierPath定义的动画应该是针对新方向进行了更新。我正在寻找一种在动画时更新CAKeyframeAnimation路径到新坐标系的方法。
答案 0 :(得分:0)
我发现您无法动态调整路径,但您可以根据原始点和计算出的比例/平移点创建新路径。
要从UIBezierPath获取CGPoints数组,您可以使用此方法:https://stackoverflow.com/a/36374209/1491675
对于动画开始后的设备旋转,保持对动画中当前点的引用,并在设备旋转时重新计算路径,并用新的动画替换现有动画,而不包括已经发生的动画部分。 / p>