如何为 CGpath 数组的绘制设置动画?
How to animate the drawing of an array of CGpath?
我正在尝试制作一个为用户绘制对象的应用程序。我现在拥有其中一个对象,它由 [UIBezierPath]
类型的数组构成。然后,我使用一个循环将数组中的所有 UIBezierPath
更改为 CGPath
,然后想要为那些一条一条绘制的路径设置动画。但是,当我现在尝试这段代码时,它不起作用,而且我真的无法在网上找到任何关于此的有用信息。这是用于将由 UIBezierPath
组成的数组 macbookPath
转换为 CGPath
:
的代码
for path in macbookPath {
drawingPath.append(path.cgPath)
}
然后我使用这段代码尝试绘制路径:
for cgPath in drawingPath {
shapeLayer.path = cgPath
}
这是函数 drawForm()
的其余代码,应该将表单绘制到名为 aiDrawView
:
的视图上
@objc func drawForm() {
var drawingPath = [CGPath]()
var macbookPath = Forms.MacbookForm()
let shapeLayer = CAShapeLayer()
shapeLayer.frame = aiDrawView.bounds
for path in macbookPath {
drawingPath.append(path.cgPath)
}
for cgPath in drawingPath {
shapeLayer.path = cgPath
}
let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd")
strokeEndAnimation.duration = 2.0
strokeEndAnimation.fromValue = 0.0
shapeLayer.add(strokeEndAnimation, forKey: "strokeEndAnimation")
}
我是 CAShapeLayer
和 CABasicAnimation
以及 UIBezierPath
的新手,所以非常感谢您的帮助!!! :D
我建议从您的路径数组中构建一个 UIBezierPath
,然后为其设置动画:
var paths: [UIBezierPath] = ...
let path = UIBezierPath()
paths.forEach { path.append([=10=]) }
shapeLayer.path = path.cgPath
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.duration = 2.0
animation.fromValue = 0.0
shapeLayer.add(animation, forKey: nil)
例如,这里有 100 条路径,合并为一条路径,其 strokeEnd
然后在形状图层上进行动画处理:
假设您的路径数组确实形成了一些连续的路径,我可能建议将其存储为 CGPoint
的数组。然后您可以从中构建一条路径。这消除了所有这些路径的开销。此外,它为原始数据集的缩放打开了大门,而无需引入任何工件,能够使用线连接选项, 如果你有不希望的线段序列等。
我正在尝试制作一个为用户绘制对象的应用程序。我现在拥有其中一个对象,它由 [UIBezierPath]
类型的数组构成。然后,我使用一个循环将数组中的所有 UIBezierPath
更改为 CGPath
,然后想要为那些一条一条绘制的路径设置动画。但是,当我现在尝试这段代码时,它不起作用,而且我真的无法在网上找到任何关于此的有用信息。这是用于将由 UIBezierPath
组成的数组 macbookPath
转换为 CGPath
:
for path in macbookPath {
drawingPath.append(path.cgPath)
}
然后我使用这段代码尝试绘制路径:
for cgPath in drawingPath {
shapeLayer.path = cgPath
}
这是函数 drawForm()
的其余代码,应该将表单绘制到名为 aiDrawView
:
@objc func drawForm() {
var drawingPath = [CGPath]()
var macbookPath = Forms.MacbookForm()
let shapeLayer = CAShapeLayer()
shapeLayer.frame = aiDrawView.bounds
for path in macbookPath {
drawingPath.append(path.cgPath)
}
for cgPath in drawingPath {
shapeLayer.path = cgPath
}
let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd")
strokeEndAnimation.duration = 2.0
strokeEndAnimation.fromValue = 0.0
shapeLayer.add(strokeEndAnimation, forKey: "strokeEndAnimation")
}
我是 CAShapeLayer
和 CABasicAnimation
以及 UIBezierPath
的新手,所以非常感谢您的帮助!!! :D
我建议从您的路径数组中构建一个 UIBezierPath
,然后为其设置动画:
var paths: [UIBezierPath] = ...
let path = UIBezierPath()
paths.forEach { path.append([=10=]) }
shapeLayer.path = path.cgPath
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.duration = 2.0
animation.fromValue = 0.0
shapeLayer.add(animation, forKey: nil)
例如,这里有 100 条路径,合并为一条路径,其 strokeEnd
然后在形状图层上进行动画处理:
假设您的路径数组确实形成了一些连续的路径,我可能建议将其存储为 CGPoint
的数组。然后您可以从中构建一条路径。这消除了所有这些路径的开销。此外,它为原始数据集的缩放打开了大门,而无需引入任何工件,能够使用线连接选项,