タッチベントの処理とタイマーの処理について
内容
iPhone/iPadプログラミングバイブル iOS9/Xcode7/Swift 対応 (smart phone programming bible)
- 作者: 布留川英一
- 出版社/メーカー: ソシム
- 発売日: 2015/10/27
- メディア: 単行本
- この商品を含むブログ (1件) を見る
上の本を参考にiOSのUIViewと戯れています。
- タッチベントの処理
- UIResponder
- 画面の再描画
- タッチ位置の取得
- ルートビューコントローラの取得
- タイマーの処理
- UIImageとUIImageViewの違い
- タイマーの設定
タッチベントの処理
UIResponder
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIResponder_Class/
UIViewクラスとUIApplicationクラスのスーパークラスで、タッチ操作に関するイベントを取得、処理できます。
タッチイベントの操作を行いたいときは、このクラスのメソッドをオーバーライドします。
タッチ開始時
func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
タッチ移動時
func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
タッチ終了時
func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
タッチキャンセル時
func touchesCanceld(touches: Set<UITouch>, withEvent event: UIEvent?)
画面の再描画
func setNeedsDisplay()
サンプルでは、タッチイベントを取得 => タッチイベントをプロパティに => 再描画 としていましたが、これ子Viewの一部を再描画などでなくて大丈夫なのかな(いちいち全体再描画するのはちと怖いな)、みたいなことを思ってしまった...。
タッチ位置の取得
UITouch#locationInView(view: UIView?) -> CGPoint
ルートビューコントローラの取得
ルートビューコントローラから3Dタッチが利用可能かの設定が取得できます。
ルートビューコントローラは下記の手順で取得します。
- UIApplicationクラスのsharedApplicationでUIApplicationオブジェクトを取得
- UIApplicationクラスのkeyWindowプロパティ、またはwindowsプロパティからウィンドウを取得
- windowクラスのrootViewControllerプロパティでルートビューコントローラを取得
ルートビューコントローラから3Dタッチが利用可能かなどの設定は、UIViewControllerクラスのtraitCollectionプロパティを通して取得できる、UITraitCollectionクラスのオブジェクトから取得できます。このUITraitCollectionクラスのオブジェクトには端末の特徴的な情報(縦方向, 横方向のサイズ, 画面のスケール, UIの種類...)が入っています。
タイマーの処理
UIImageとUIImageViewの違い
補完でUIImageViewがでてきて、あれ、UIImage
を違うの?と思ったので確認。
UIImage
https://developer.apple.com/reference/uikit/uiimage
画像データをiOSのプラットフォームで取り扱うためのクラス。Immutableなクラスなので利用する時はいつも既存のデータからこのオブジェクトを作成するっぽい。
Drawable的な。
UIImageView
https://developer.apple.com/reference/uikit/uiimageview
一連のアニメする画像あるいは静止画像を表示するためのView.アニメの開始 & 停止のメソッドも生えてるみたいです。
ImageView的な。
タイマーの設定
var _timer = NSTimer.scheduledTimerWithTimeInterval( 定時処理を行う時間の間隔, target: self, selector: "onTick:", // 時間になった時実行するメソッド名 // deprectedみたいな警告出てたので実際使う時は調べ直す userInfo: nil, repeats: true) // 繰り返し処理を行うかどうか
// タイマーの停止 _timer.invalidate() _timer = nil