Controllerの使い方。レイアウト変更をアニメーションさせる。Controllerの使い方。レイアウト変更をアニメーションさせる。本記事ではUICollectionViewControllerクラスのプロパティについて説明する。動作確認を行うためのXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用されたし。上記プロジェクトを実行すると、コレクションビューの中に10個の果物が表示され、果物をタップすると拡大画面に遷移する。Controllerを利用して実装している。以下のコードはコレクションビューコントローラーに設定したカスタムクラス。検証はこのコードを修正しながら行う。//セルを取得し、イメージビューに画像を設定して返す。//セグエを実行する。//選択中のセルの画像を取得する。//遷移先のビューコントローラーを取得し、インスタンス変数に画像とテキストを設定する。{//セルを取得し、イメージビューに画像を設定して返す。{//セグエを実行する。{//選択中のセルの画像を取得する。UIImageView//遷移先のビューコントローラーを取得し、インスタンス変数に画像とテキストを設定する。imageView.image}}clearsSelectionOnViewWillAppearプロパティビューが表示されるときにテーブルの選択を解除する(true)、または、解除しない(false)を設定するプロパティ。デフォルトはtrueになっている。いっても、コレクションビューの初期状態は選択しても画像が変わらないので、このプロパティを変えただけでは選択が解除されたのか、されていないのかが分からない。そこで「データを返すメソッド」を以下のコードのように変更して、セル選択時の背景画像を設定する。//セルを取得し、イメージビューに画像を設定して返す。//セル選択時の背景色を設定する。{//セルを取得し、イメージビューに画像を設定して返す。".png")//セル選択時の背景色を設定する。cell}すると以下の動画のように、選択したセルの背景色が変わる。遷移先画面から戻ると、選択が解除されて色が元に戻る。以下のコードのようにclearsSelectionOnViewWillAppearプロパティをfalseに設定して選択を解除しないようにしてみよう。//ビューが表示されるときに選択を解除しない設定にする。UIColor.whiteColor()//ビューが表示されるときに選択を解除しない設定にする。false}すると、以下の動画のように遷移先画面から戻っても選択が解除されないままになる。installsStandardGestureForInteractiveMovementプロパティセルの並び替えを行うためのジェスチャーリコグナイザーをインストールする(true)、しない(false)を設定するプロパティ。trueの場合、セルを長押ししたあとにドラッグ&ドロップで移動できる。デフォルトはtrueに設定されているのでこのまま並べ替えができるように思ってしまいそうだが、以下のメソッドをオーバーライドしないと機能しない。検証ではメソッド内部では何もしていないが、通常は引数に渡ってくる移動元と移動先のインデックス番号を使って元データの並び替えを行う。\(destinationIndexPath.row)")}以下は実際のプレイ動画useLayoutToLayoutNavigationTransitionsプロパティこのプロパティをtrueにするとコレクションビューのレイアウトをアニメーションさせながら変更できるようになる。利用するにはナビゲーションバーが必要で、変更後のレイアウトが定義されたコレクションビューコントローラーをナビゲーションバーにpushしてやるとアニメーションが発生する。果物をタップするとアニメーションで画像が拡大されるものを実装してみよう。メニューから「File」⇒「New」⇒「File...」を選択する。Class」を選択する。ofに「UICollectionViewController」を入力し、Nextボタンを押す。保存先を指定する画面が表示されるので、プロジェクトと同じ場所であることを確認し、Createボタンを押す。TestCollectionViewController2.swiftを以下のコードに変更する。今回はレイアウト変更後の画面に機能は持たせないので、viewDidLoadメソッドでレイアウトの設定だけを行っている。//画像サイズと画面サイズを同じにし、スペースを無くす。UICollectionViewFlowLayout{//画像サイズと画面サイズを同じにし、スペースを無くす。0)}}}TestCollectionViewController.swiftを以下のコードに変更する。「セル選択時の呼び出しメソッド」でuseLayoutToLayoutNavigationTransitionsプロパティをtrueにし、レイアウト変更用のコレクションビューコントローラーをナビゲーションコントローラーにpushしている。//セルを取得し、イメージビューに画像を設定して返す。//セル選択時の背景色を設定する。//レイアウト変更用のコレクションビューコントローラーのインスタンスをナビゲーションコントローラーにpushする。{//セルを取得し、イメージビューに画像を設定して返す。".png")//セル選択時の背景色を設定する。{//レイアウト変更用のコレクションビューコントローラーのインスタンスをナビゲーションコントローラーにpushする。true)}}以下は実際のプレイ動画レイアウトを連続で変更する。pushするのは必ず他のクラスのインスタンスにしなければならないわけではなく、自分のクラスのインスタンスをpushして再帰呼び出しのようなレイアウト変更もできる。果物をクリックする度に徐々に画像が拡大していくものを実装してみよう。TestViewController.swiftを以下のコードに変更する。どのインスタンスからも参照できる変数「レイアウト変更残回数」をクラスの外に定義し、画面幅をレイアウト変更残回数で割った値を画像の幅にする。pushする度にレイアウト変更残回数をデクリメントすることで、レイアウトを変更する度に画像が大きくなっていく。//画面幅をレイアウト変更残回数で割った値を画像サイズにする。//スペースを無くす。//セルを取得し、イメージビューに画像を設定して返す。//セル選択時の背景色を設定する。//自クラスのインスタンスを作り、ナビゲーションコントローラーにpushする。//削除(戻るボタンが押された)の場合はレイアウト変更残回数をインクリメントする。false//画面幅をレイアウト変更残回数で割った値を画像サイズにする。UICollectionViewFlowLayout{//スペースを無くす。{//セルを取得し、イメージビューに画像を設定して返す。".png")//セル選択時の背景色を設定する。{//自クラスのインスタンスを作り、ナビゲーションコントローラーにpushする。{//削除(戻るボタンが押された)の場合はレイアウト変更残回数をインクリメントする。バーの色や背景画像をカスタマイズする。Controllerの使い方。ボタンでマスター部を出し入れする方法。...【Swift】UICollectionViewLayoutの使い方。コレクションビューのセルの配置をカスタマイズする。Controllerの使い方。複数画面を階層的に移動する。Controllerの使い方。格子状に並んだセルをタップして画面遷移する。コメントをキャンセルメールアドレスが公開されることはありません。