ちょっとしたアニメーションや何らかの処理後に1クッション置いてから次処理に遷移させたい時に重宝しているのがこれ!!

extension NSTimer {
  class func scheduledTimerWithTimeInterval(interval: NSTimeInterval,
						 repeats: Bool,
						 handler: NSTimer! -> Void) -> NSTimer {
        	let fireDate = interval + CFAbsoluteTimeGetCurrent()
        	let repeatInterval = repeats ? interval : 0
        	let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, repeatInterval, 0, 0, handler)
        	CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes)
        	return timer
    	}
}

これを使うと、timerハンドラーを別途に書くことなく、使いたい所と同じ場所で処理が書ける為、見通しが良いので嬉しいのです。

例えば、こんな感じで。。。
「SpriteKitであるButton(btnSprite)を回転させながら、別のImageを拡大アニメーションさせる」
見たいなことが、すんなり出来たりするのです

    var btnpos : CGPoint = CGPoint( x: 0 , y: 0 )
    btnpos.x = self.frame.width/2
    btnpos.y += 16
    btnSprite.position = btnpos
    self.addChild( btnSprite )

    //ImageSprite
    var hitisp = SKSpriteNode(imageNamed:"hogehoge") //hogehoge.pngの読み込み

    var count = 0
    eTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, repeats: true) { timer in
            count += 1
            if (count <= 10) {
                //移動アクション
                // 指定された座標まで移動するアクションを作る.
                btnpos.y += 16  // btnSprite位置のUpadte
                var location : CGPoint = btnpos
                var moveToTouch : SKAction = SKAction.moveTo(location ,duration:2.0 )
                // 相対的に回転するアクションを作る.
                let RotateAction = SKAction.rotateByAngle(self.DegreeToRadian(180.0), duration: 5.0)
            
                // 同時実行するグループアクションを作る.
                let groupAction = SKAction.group([
                    RotateAction,
                    moveToTouch,
                    ])
                btnSprite.runAction( groupAction )
            }
            
            //imageの表示
            if count == 15 {
                btnpos.y -= (16 * 10)  // btnSprite位置のUpadte 
                hitisp.position = btnpos  
                self.addChild( hitisp )
            }
            
            //Imageのaction設定
            if (count >= 15) {
                //移動アクション
                // 指定された座標まで移動するアクションを作る.
                btnpos.y += 12  // btnSprite位置のUpadte
                var location : CGPoint = btnpos
                var moveToTouch : SKAction = SKAction.moveTo(location ,duration:2.0 )
                // 相対的に拡大させるアクションを作る.
                let ScaleAction = SKAction.scaleBy(1.2, duration: 1)
                
                // 同時実行するグループアクションを作る.
                let groupAction = SKAction.group([
                    ScaleAction,
                    moveToTouch,
                    ])
                hitisp.runAction( groupAction )
            }
            
            if count >= 20 {
                timer.invalidate()  //timerの終了
            }
        }//Timer

では。では。