如何以编程方式同时为两个视图同时设置动画? [英] How do I animate two views simultaneously in swift programmatically?
问题描述
在另一个问题中,如何设置动画:
绘制行动画
In another question, how to animate was answered: Draw line animated
然后我尝试添加一个视图以同时进行动画处理。我想创建两个动画路径,这些路径在相同的 CGPoint
处相遇,但有不同的路径到达那里。我希望两条路径同时开始,并同时结束动画。我当前的方法是创建另一个名为path2的 UIBezierPath
以及另一个名为的第二个
,但是第二条路径只是覆盖了第一条路径。我很确定两个路径都需要不同的 CAShapeLayer
shapeLayer2 CAShapeLayer
s,因为每个路径将具有不同的属性。似乎然后我需要将 CAShapeLayer
实例添加为 view.layer
子层,但这似乎并没有正在工作。为了达到预期的效果,我应该做些什么?
I then tried to add a view to animate simultaneously. I want to create two animated paths that meet at the same CGPoint
but have different paths to get there. I want both paths to start at the same time and end animation at the same time. My current approach is to create a second UIBezierPath
called path2, along with a second CAShapeLayer
called shapeLayer2
, but the second path is just overriding the first. I'm pretty sure both paths need different CAShapeLayer
s because each path will have different attributes. It seems like I then need to add the CAShapeLayer
instance as a view.layer
sublayer but it doesn't seem to be working. What should I be doing differently to achieve the desired result?
推荐答案
这是最终有效的方法。
Here is what ultimately worked.
func animatePath() {
// create whatever path you want
let path = UIBezierPath()
path.move(to: CGPoint(x: 10, y: 100))
path.addLine(to: CGPoint(x: 200, y: 50))
path.addLine(to: CGPoint(x: 200, y: 240))
// create whatever path you want
let path2 = UIBezierPath()
let bottomStartX = view.frame.maxX - 10
let bottomStartY = view.frame.maxY - 100
path2.move(to: CGPoint(x: bottomStartX, y: bottomStartY))
path2.addLine(to: CGPoint(x: bottomStartX - 100, y: bottomStartY - 100))
path2.addLine(to: CGPoint(x: 200, y: 240))
// create shape layer for that path
let shapeLayer = CAShapeLayer()
shapeLayer.fillColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0).cgColor
shapeLayer.strokeColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1).cgColor
shapeLayer.lineWidth = 4
shapeLayer.path = path.cgPath
let shapeLayer2 = CAShapeLayer()
shapeLayer2.fillColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0).cgColor
shapeLayer2.strokeColor = UIColor.blue.cgColor
shapeLayer2.lineWidth = 4
shapeLayer2.path = path.cgPath
// animate it
view.layer.addSublayer(shapeLayer)
view.layer.addSublayer(shapeLayer2)
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0
animation.duration = 2
shapeLayer.add(animation, forKey: "MyAnimation")
let animation2 = CABasicAnimation(keyPath: "strokeEnd")
animation2.fromValue = 0
animation2.duration = 2
shapeLayer2.add(animation2, forKey: "MyAnimation")
// save shape layer
self.shapeLayer = shapeLayer
}
这篇关于如何以编程方式同时为两个视图同时设置动画?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!