SwiftでsetAnimationDidStopSelectorを使う

Swiftだと、どういう風に書いて良いのか分からないので調べてみた。

検索して見つかったのはちゃんと動かなくて、結果的にこうなった。

// ボタンを押したとか、そういうの
func hoge() {
    UIView.beginAnimations( nil, context: nil )
    UIView.setAnimationDelegate( self )
    UIView.setAnimationDidStopSelector( Selector("myAnimationDidStop:finished:context:") )
    // プロパティを変更してアニメーションさせる
    UIView.commitAnimations()
}

func myAnimationDidStop(animationID: String?, finished: NSNumber, context: UnsafeMutablePointer<Void>) {
    if animationID != nil {
        println( "myAnimationDidStop animationID: \(animationID!), finished: \(finished.boolValue)" )
    }
    else {
        println( "myAnimationDidStop finished: \(finished.boolValue)" )
    }
}

これが正しいのか分からないけど、とりあえずそれっぽく動いた。

ちなみに、setAnimationDelegateだけ呼んで、

override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
    println( "animationDidStop finished: \(flag)" )
}

を書くと、flagの値がfalseになる・・・、なんで?

func myAnimationDidStop(animationID: String?, finished: Bool, context: UnsafeMutablePointer<Void>) {
    //...
}

って書くと、finishedfalseになる。

Swiftってほんと、難しいですね!

おしまい。

Leave a Comment