こんなんでどうでしょう。
viewDidLoadで生成しているパスを変えれば円形以外のも書けるはずです。
参考サイト:
http://c-geru.com/as_blind_side/2015/10/uibezierpath.html
ViewController.swift
1class ViewController: UIViewController {
2
3 let shapeLayer: CAShapeLayer = {
4 let layer = CAShapeLayer()
5 layer.frame = CGRect(x: 0, y: 0, width: 100.0, height: 100.0)
6 layer.fillColor = UIColor.clearColor().CGColor
7 layer.strokeColor = UIColor.blueColor().CGColor
8 layer.lineWidth = 1.0
9 return layer
10 }()
11
12 override func viewDidLoad() {
13 super.viewDidLoad()
14
15 // 円形に描画するのでそのパスを生成
16 let center = CGPoint(x: self.shapeLayer.bounds.size.width / 2.0, y: self.shapeLayer.bounds.size.height / 2.0) // 中心座標
17 let radius = self.shapeLayer.bounds.size.width / 3.0 // 半径
18 let startAngle = CGFloat(-M_PI_2) // 開始点(真上)
19 let endAngle = startAngle + 2.0 * CGFloat(M_PI) // 終了点(開始点から一周)
20 let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
21 self.shapeLayer.path = path.CGPath
22
23 self.view.layer.addSublayer(self.shapeLayer)
24 }
25
26 override func viewDidLayoutSubviews() {
27 super.viewDidLayoutSubviews()
28
29 // 画面の中心になるようにする
30 self.shapeLayer.position = CGPoint(x: self.view.bounds.size.width / 2.0, y: self.view.bounds.height / 2.0)
31 }
32
33 override func viewWillAppear(animated: Bool) {
34 super.viewWillAppear(animated)
35
36 // アニメーション開始
37 let anim = CABasicAnimation(keyPath: "strokeEnd")
38 anim.duration = 3.0
39 anim.fromValue = 0.0
40 anim.toValue = 1.0
41 shapeLayer.addAnimation(anim, forKey: "circleAnim")
42 }
43
44}

退会済みユーザー
2016/01/29 06:02
退会済みユーザー
2016/01/29 06:06 編集