Swiftで遊ぼう! - 653 - longPressed()の実装は続く
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.3で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
次のTable Viewのチュートリアルを拡張しています。
ロングプレスが発動すると、ロングプレスの持つ「state」プロパティが変化して、longPressed()メソッドが呼ばれます。
ということでstateの状態で挙動を変える必要があります。そういうときに便利なのが「switch-case」です。
switch state { case UIGestureRecognizerState.Began: case UIGestureRecognizerState.Changed: default: }
このUIGestureRecognizerStateを少し調べて見ると以下のよううな状態(state)がありました。興味深いのが最後のタイプ・プロパティの「Recognized」ですね。これをどのように使えばいいのか気になりますが今回はパスします。
enum UIGestureRecognizerState : Int { case Possible case Began case Changed case Ended case Cancelled case Failed static var Recognized: UIGestureRecognizerState { get } }
まず「UIGestureRecognizerState.Began」の挙動を制御します。まずロングプレスが発動した位置にあるセルをスナップショットとして情報を読み込むのですが、最初にちゃんとセル内でロングプレスが発動しているかどうか確認する必要があります。
guard let selectedIndexPath = indexPath else { break }
チュートリアルは「if」を使っていますが、私はアンラップさせる時に「guard」を使用した方がスッキリするので変更しました。
次はスナップショットのセル情報を持ちます。
MyCell.initialIndexPath = selectedIndexPath let cell = simpleTableView.cellForRowAtIndexPath(selectedIndexPath) as UITableViewCell! MyCell.cellSnapshot = snapshotOfCell(cell) var center = cell.center MyCell.cellSnapshot?.center = center MyCell.cellSnapshot!.alpha = 0.0 simpleTableView.addSubview(MyCell.cellSnapshot!)
ここでも知らないと使えないUITableVIewが持っているメソッドが出てきます*1。
cellForRowAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell?
「cellForRowAtIndexPath()」はNSIndexPathを与えてUITableViewCellを返します。詳しい情報は「Opt + ドラッグ」ですね。
次の「snapShotOfCell()」はカスタムメソッドです。クラス内に定義してやらないといけません。このメソッドはUITableViewCell情報からスナップショットとなるViewクラスを返すメソッドですね。
次にCellの位置情報をView情報にして、「alpha」値は透明度の設定で、「0.0(透明)〜1.0(不透明)」で指定します。今回この値を色々変えてみてもアプリで変化がないのが不思議です。もう少し検証が必要ですね。時間ができたらします。できあがったUIViewオブジェクトをTableViewに加えて表示するという仕組みです。
今日はここまで。