Swiftで遊ぼう! - 661 - UIGestureRecognizerState.Changedの実装終了
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.3で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
次のTable Viewのチュートリアルを拡張しています。
コード解説を短く区切って申し訳ないです。春先は忙しいんですよ。ゴールデンウィークもバタバタしてます。
case UIGestureRecognizerState.Changed: MyCell.cellSnapshot!.center = locationInView.y if ((indexPath != nil) && (indexPath != MyCell.initialIndexPath)) { swap(&items[indexPath!.row], &items[MyCell.initialIndexPath!.row]) simpleTableView.moveRowAtIndexPath(MyCell.initialIndexPath!, toIndexPath: indexPath!) MyCell.initialIndexPath = indexPath }
このコードの後半部分に取りかかります。「indexPath」はロングプレスジェスチャーが発動したcellのindexPathを保持しているはずです。したがって、「indexPath != nil」は常に「True」で、ロングプレスジェスチャーで指を垂直方向に上でも下でも、最初に指をタッチしたcellを動かして上か下のcellを跨ぐと、indexPathとMyCell.initalIndexPathがズレます(indexPath != MyCell.initialIndexPath)。そのような条件の時に「swap」させます。
さて、この「swap」も私にとって初出です。ちょっと調べたら基本的な関数群なんですね。そろそろ中級プログラマーの領域に足を踏み入れているなんて勝手に思っていましたが、私の認識は甘過ぎでした。こういうSwiftの標準ライブラリーのグローバルファンクションを知らないようでは話になりませんね。
それぞれのインデックスパスのrowを入れ替えて移動をさせます。移動した後は再びMyCell.initalIndexPathに設定してやって終了です。
今日はここまで。