iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 14
0

今天的目標是做出像充電螢幕那樣,裡面實心外圍邊緣漸進的動畫。

首先定義出一個 CAShapeLayer 叫做 shapeLayer。

    let shapeLayer = CAShapeLayer()
    view.layer.addSublayer(shapeLayer)

開始刻 CAShapeLayer 。

    let circularPath = UIBezierPath(arcCenter: center, radius: 100, startAngle: 0, 
    endAngle: 2 * CGFloat.pi, clockwise: true)
    let center = view.center
    shapeLayer.path = circularPath.cgPath
    shapeLayer.strokeColor = UIColor.cyan.cgColor // 邊緣顏色 cyan
    shapeLayer.lineWidth = 8 // 邊緣寬度 = 8

此時我們的動畫看起來就像這樣:
https://ithelp.ithome.com.tw/upload/images/20180102/20107694dRV93YBpJj.png

設定動畫 basicAnimation

    let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
    basicAnimation.toValue = 1 // 1 為最終值
    basicAnimation.duration = 2.5  // 設定動畫長度為 2.5 秒

不過此時我們的漸進式邊緣是從 90度角的地方開始的。
https://ithelp.ithome.com.tw/upload/images/20180102/20107694k4Q1LCIGir.png

我們可以透過修改 circularPath 的 startAngle 從原本的 0 成為 - 1/ 2 pi 修正這個地方。


let circularPath = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)

並再稍作調整

    shapeLayer.lineCap = kCALineCapRound // 邊線圓角
    shapeLayer.fillColor = UIColor.clear.cgColor  // 去掉裡面的圓的顏色

https://ithelp.ithome.com.tw/upload/images/20180102/20107694GFxwmeLE3h.png

最後成果:
動畫總時間為 3 秒鐘,點擊一下螢幕會開始順時針漸進。

https://ithelp.ithome.com.tw/upload/images/20180102/20107694deEZEZPNYJ.png


上一篇
DAY 13: 初試 Animation
下一篇
DAY 15 : 使用 URLRequest 摳資料
系列文
Swift 學習目標 -- 30 天送審第一支APP33

2 則留言

1
吳晉榮
iT邦新手 5 級 ‧ 2018-01-03 15:11:12

可以用LICEcap錄製gif來展示demo

0
Jeremy Xue
iT邦新手 5 級 ‧ 2018-01-03 16:53:35

我剛剛看了好久想說圖片怎麼都沒動haha

XD 之後補

假的,因為你眼睛業障重

我要留言

立即登入留言