iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
0
Software Development

30 天上手 iOS App 開發系列 第 22

30 天上手 iOS App 開發 DAY 22

還記得之前有教過用 CAShapeLayer 畫圖嗎
現在我們要在上面加上動畫效果

今天先教大家一個簡單的曲線動畫

首先呢 我們要先宣告出我們的 layer 及 path

let lineLayer = CAShapeLayer()
let path = UIBezierPath()

再來是曲線的四個點 分別是起點終點及兩個控制點

let startPoint = CGPoint(x: 100, y: 150)
let controlPoint1 = CGPoint(x: 150, y: 50)
let controlPoint2 = CGPoint(x: 200, y: 250)
let finalPoint = CGPoint(x: 250, y: 150)

然後畫出一個簡單的曲線
並將 strokeColor 設成紅色、 fillColor 設成透明,再給他一個線寬3

path.move(to: startPoint)
path.addCurve(to: finalPoint, controlPoint1: controlPoint1, controlPoint2: controlPoint2)
lineLayer.path = path.cgPath
lineLayer.strokeColor = UIColor.red.cgColor
lineLayer.fillColor = UIColor.clear.cgColor
lineLayer.lineWidth = 3

接下來就是重點了
我們要使用 CABasicAnimation 來做動畫

先建立一個 CABasicAnimation
keyPath 是我們要改變的屬性
strokeEnd 指的是畫筆結束的地方
fromValue 是值開始的地方
toValue 是值結束的地方
duration 是動畫時間

最後再將動畫加入我們的 layer 裡
再將 layer 加入 view 中

let drawAnimation = CABasicAnimation(keyPath: "strokeEnd")
drawAnimation.fromValue = 0
drawAnimation.toValue = 1
drawAnimation.duration = 3

lineLayer.add(drawAnimation, forKey: "drawLine")

self.view.layer.addSublayer(lineLayer)

效果如下

我們再試試加上另一種動畫的方式
先將原本的動畫註解,再加上一下程式

let animation1 = CABasicAnimation(keyPath: "strokeStart")
animation1.fromValue = 0.5
animation1.toValue = 0
animation1.duration = 3

let animation2 = CABasicAnimation(keyPath: "strokeEnd")
animation2.fromValue = 0.5
animation2.toValue = 1.0
animation2.duration = 3

lineLayer.add(animation1, forKey: "ani")
lineLayer.add(animation2, forKey: "ani")

效果如下


上一篇
30 天上手 iOS App 開發 DAY 21
下一篇
30 天上手 iOS App 開發 DAY 23
系列文
30 天上手 iOS App 開發30

尚未有邦友留言

立即登入留言