きのうちょっと開発者の人と会う機会があったのですが、 その人が「可動範囲が長いScrollViewを使うときは、viewがリサイクルできるようにTableViewを使っている」みたいなことをいっていました。 たしかにTableViewを使えばcell単位でリサイクルして使えるし、 TableView自体よく使うものだから理解も深いだろうとは思います。 しかし、TableViewで作るのはなんか勿体無いです。 普通にScrollViewでもそんなに難しくないし、 二次元スクロールにしたり拡大機能つけたりとTableViewではできないこともできるので ちょっと紹介しておきたいと思います。
大体の流れ
大体の流れを書いてみます。
- スクロールを検知する
- 表示されるべきViewのリスト(番号など)を作る
- 現在表示していて、表示されるべきリストに載っていないものを リサイクル用のNSMutableSetに保存してremoveFromSuperViewする
- 現在表示していなくて、表示されるべきリストに乗っているものを追加する ※追加するとき、リサイクル用のNSMutableSetからanyObjectでオブジェクトが取れればそれを利用する
たったのこれだけです。
ポイント
リサイクルのポイントはNSMutableSetを使うことです。 普段使わないクラスなので忘れられがちですが、NSMutableSetはこういうリサイクルにはすごい有能です。 基本的には順番のないNSMutableArrayというイメージで、anyObjectでのみデータが取り出せます。 anyObjectではメモリ的に一番取り出しやすいオブジェクトを返してくれます。 なので、リサイクルしたいぐらい速度を求めるときにはすごい有能なわけです。
明日辺りに時間があれば1次元分のScrollViewのコード書いて載せようと思います!