4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift CALayerのサブクラスでアニメーション

Posted at

#概要

アニメーションで動く円グラフを作成したくて、
Objective-CのライブラリなどソースレビューしていましたがCALayerのサブクラスでは
自分が持つプロパティを変更されたタイミングでactionForKeyメソッドが呼ばれる。
今回はカスタムクラスとして、円グラフの開始角度/終了角度(それぞれstartAngle/endAngle)プロパティを持たせており、これらを親ビューなどから変更するとアニメーションされるらしい

//CALayerのサブクラス内
dynamic var startAngle: CGFloat = 0
dynamic var endAngle: CGFloat = 0

func makeAnimationForKey(key: String) -> CABasicAnimation{
        var anim: CABasicAnimation = CABasicAnimation()
        anim.keyPath = key
        anim.fromValue = presentationLayer().valueForKey(key)
        anim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
        anim.duration = 0.5
        
        return anim
    }

override func actionForKey(event: String!) -> CAAction! {
     if event == "startAngle" || event == "endAngle"{   
        return makeAnimationForKey(event)
    }
    return super.actionForKey(event)
}

#プロパティの変更が認識されない

actionForKeyにstartAngle/endAngleのイベント文字が渡ってくるはずが
上記のようにSwiftに書き直してみると渡って来ない
おそらくKeyValueObserving的な問題のような気がするけど、そうなると
Swiftでは無理なのでしょうか
どなたかご存知の方はいらっしゃいませんか??

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?