LoginSignup
11
13

More than 5 years have passed since last update.

iOSの「写真」アプリみたいなギャラリーを作る

Last updated at Posted at 2016-02-04

iOSの「写真」アプリみたいなギャラリーを作る

iPhoneの「写真」アプリってデフォルトだけあってギャラリーアプリとしては快適な動きをします。

これを自作するとなると意外にもいいライブラリも見つからず、また、これだ!と思うコードも見つからなかったので自作してみたという話です。

コードは以下

基本はUIScrollViewを使う

ギャラリーの動きはUIScrollViewで再現できます。表示したい写真をUIScrollViewを下地に、水平方向に並べてaddViewさせます。ただし、標準だと写真と写真の境目で止まらないので、pagingEnabledYES にしてページ送りの動きにします。

表示したい写真の前後だけaddViewする

仮に10枚の写真を表示したければ10枚分addViewすればいいでしょうが、これが何百、何千になったらメモリが足りなくなったり重くなったりするでしょう。なので、最初に表示するべき写真とその前後の写真3枚のみをaddViewし、スクロールが完了したタイミングで前のaddView画像を破棄し、新たに3枚の写真をaddViewするという仕組みにしました。

スクロールを「進めた」か「戻った」かの判定がシビア

この処理は、スクロールが完了した時に呼ばれるメソッドscrollViewDidEndDecelerating内で行っていますが、スクロールを開始して指を離して自然と止まる(ページ送りが完了する)前に指で止めても呼び出されるため、自然と止まったか、そうでないかの判定をしておかないと、表示されるべき画像がおかしくなります。
試行錯誤したあげく、結局はscrollViewWillBeginDeceleratingという指を離したタイミングで呼ばれる関数内で一旦スクロールを不許可にして止めれないようにして、scrollViewDidEndDeceleratingで元に戻すという処理にしました。

おわりに

以上でギャラリーっぽいアプリにはなりましたが、scrollViewWillBeginDeceleratingでスクロール禁止しているだけあって、高速で移動することができません。他にもサムネイルを画面下部に表示させた上で、サムネイル直接選択で画像にジャンプするとかいう機能もつけてみたいところではあります。というか、もっと探せば便利なライブラリがありそう、、

11
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13