Swiftで遊ぼう! - 652 - longPressed()はまだまだ準備中(^^;)
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.3で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
次のTable Viewのチュートリアルを拡張しています。
ロングプレス・ジェスチャーの中核を担うメソッドを実装中です。
func longPressed(longPress: UILongPressGestureRecognizer) { print("This method's just called.") let state = longPress.state let locationInView = longPress.locationInView(simpleTableView) let indexPath = simpleTableView.indexPathForRowAtPoint(locationInView) .....
次はロングプレスで選択したCell(セル)を用意します。少し大きくして浮かび上がったように見えるようにします。longPressedメソッドは、ジェスチャーの状態が変化する度に呼ばれるので、このメソッド内に普通のプロパティを持たせると、必要も無いのに幾つも作られてしまうのでメモリーの無駄です。扱うセルは1つでいいので、こういう時に使用するのがタイプ・プロパティですね*1。
私の読んでいるチュートリアル*2では次のように用意されていました。
struct My { static var cellSnapshot: UIView? = nil } struct Path { static var initialIndexPath : NSIndexPath? = nil }
どうして2つに分けてしまうのか私には理解し難いので次のように変更しました。もし理由があるのなら教えてください。ベテランプログラマーの皆さんm(_ _)m
struct MyCell { static var cellSnapshot: UIView? = nil static var initialIndexPath : NSIndexPath? = nil }
このタイプ・プロパティを使って、ジャスチャーの効果が波及している期間のセルのスナップショットとインデックス情報を保持する訳ですね。
理解できたので今日は終わり。
*1:自分で説明をしていながら、「タイプ・プロパティって何だ?」状態でした(^_^;) ->Swiftで遊ぼう! - 564 - 構造体、タイプ・メソッドとタイプ・プロパティ - Swiftで遊ぼう! on Hatena
*2:知っている人は分かりますね。分からなければ質問してください。公開します。