问题描述
我想在屏幕中央有一条线,让它像一条蛇一样动画
I want to have a line in the center of the screen and animate it like a snake
这是我想做的一步一步的动画
This is step by step animation I want to make
我该怎么做?
推荐答案
您可以为 CAShapeLayer
上的 path
的笔划末端设置动画,例如,>
You can animate the end of the stroke of a path
on a CAShapeLayer
, e.g.,
weak var shapeLayer: CAShapeLayer?
@IBAction func didTapButton(_ sender: Any) {
// remove old shape layer if any
self.shapeLayer?.removeFromSuperlayer()
// create whatever path you want
let path = UIBezierPath()
path.move(to: CGPoint(x: 10, y: 50))
path.addLine(to: CGPoint(x: 200, y: 50))
path.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
// animate it
view.layer.addSublayer(shapeLayer)
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0
animation.duration = 2
shapeLayer.add(animation, forKey: "MyAnimation")
// save shape layer
self.shapeLayer = shapeLayer
}
结果:
显然,您可以将 UIBezierPath
更改为适合您兴趣的任何内容.例如,路径中可以有空格.或者你甚至不需要直线路径:
Clearly, you can change the UIBezierPath
to whatever suits your interests. For example, you could have spaces in the path. Or you don't even need to have rectilinear paths:
let path = UIBezierPath()
path.move(to: CGPoint(x: 10, y: 130))
path.addCurve(to: CGPoint(x: 210, y: 200), controlPoint1: CGPoint(x: 50, y: -100), controlPoint2: CGPoint(x: 100, y: 350))
您还可以在 CAAnimationGroup
中组合笔画开始和结束的动画:
You can also combine animation of both the start and end of the stroke in a CAAnimationGroup
:
// create shape layer for that path (this defines what the path looks like when the animation is done)
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 = 5
shapeLayer.path = path.cgPath
shapeLayer.strokeStart = 0.8
let startAnimation = CABasicAnimation(keyPath: "strokeStart")
startAnimation.fromValue = 0
startAnimation.toValue = 0.8
let endAnimation = CABasicAnimation(keyPath: "strokeEnd")
endAnimation.fromValue = 0.2
endAnimation.toValue = 1.0
let animation = CAAnimationGroup()
animation.animations = [startAnimation, endAnimation]
animation.duration = 2
shapeLayer.add(animation, forKey: "MyAnimation")
产量:
CoreAnimation 使您可以对描边路径的渲染方式进行大量控制.
CoreAnimation gives you a lot of control over how the stroked path is rendered.
这篇关于画线动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!