Edited at

SwiftでEnterFrameBeaconを作る

More than 3 years have passed since last update.


EnterFrameBeaconとは?

EnterFrameBeaconは指定されてFPSで処理を実行する、アニメーションフレームを管理クラスです。

Swiftでは、CAnimationとかあるようですが、非常に使いづらいので簡単に動きが付けれるエンジンを用意します。

EnterFrameBeaconは今は亡きActionScriptの技術でした...アーメン。

今回は簡易版です。


仕組み

仕組みは簡単です。管理クラスを用意し、リスナーを保持するプロパティを持たせます。


EnterFrameBeacon.swift


class EnterFrameBeacon: NSObject {

private var _listeners:[EnterFrameDelegate] = []
}


リスナーにはEnterFrameDelegate(プロトコル)を関連させます。この型をもつオブジェクトを

_listenersで管理します。_listenersは静的プロパティのほうが扱いやすいです。


EnterFrameDelegate.swift

import Foundation

import UIKit

protocol EnterFrameDelegate {
func update()
}


毎フレーム処理を実行するためにはNSTimerクラスを利用します。

プロパティとして_timerを用意します。


EnterFrameBeacon.swift

private var _timer: NSTimer!


EnterFrameBeaconは3つのメソッドを持ちます。


  • initialize 初期化

  • addEventListener リスナー登録

  • update 毎フレーム実行される処理

順番に見ていきます。

まずは初期化、引数でFPSを渡します。デフォルトで60が設定されます。


EnterFrameBeacon.swift

func initialize(fps: NSTimeInterval = 60.0){

self._timer = NSTimer.scheduledTimerWithTimeInterval(1.0 / fps, target: self, selector: "update", userInfo: nil, repeats: true)
}

次にリスナー登録、EnterFrameDelegateプロトコルを持つインスタンスを登録します。


EnterFrameBeacon.swift


func addEventListener(listener: EnterFrameDelegate) {
self._listeners.append(listener)
}

最後に毎フレーム呼び出される処理です。


EnterFrameBeacon.swift

func update(){

let max = self._listeners.count
for var i = 0; i < max; ++i {
let obj: EnterFrameDelegate = self._listeners[i] as EnterFrameDelegate
obj.update()
}
}

これで完了です。

実際に使う場合は、以下のようになります。


ViewController.swift

self._beacon = EnterFrameBeacon()

self._beacon.initialize(60.0)
self._beacon.addEventListener(self)

func update(){
// 具体的な処理
}


以上です。