Help us understand the problem. What is going on with this article?

SwiftでEnterFrameBeaconを作る

More than 5 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(){
    // 具体的な処理
}

以上です。

pol-inc
「未来を加速する(Accelerate the Future.)」 それがPOLのミッションです。 課題解決とイノベーションにより、良い未来の到来を早める。私たちにしか創れない良い未来を創る。 私たちがPOLに集まっているのは、このためです。
https://pol.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away