シンプルなImageViewerをつくった
ざっくりまとめ。
- ANZSingleImageViewer っていう画像ビューワーつくりました
- 特定の
UIImage
を表示する - 拡大・縮小表示できる
- ZoomTransition もできる
- 特定の
- 開発話
- つくった理由
- ハマったところ
です。
環境
- Xcode v10
- Swift v4.2
ImageViewerつくった!
- Swift 4.2 です!(笑)
UIImage
を表示するだけシンプルなもの- URL を渡したらロードするとか、複数みられるとか..そういうのはなし
- 画像の拡大・縮小はできます
- ダブルタップとかピンチアウトとかで
- Zoom Transition はできます!
- シンプルを目指したとかいっておきながら、謎の...(笑)
さんぷる
うむ、なにいってるのよくわからん。っていう方のために(笑)
なぜつくったのか
こういうものは他にもたくさんあるのだけれど...
使っていたものが、どうも Swift 4.2 対応されないような気がして...
(最終 commit が結構前とか、issue とか PR とかたまっているとか...で)
代替として SimpleImageViewer っていうものがあるのだけれど、そもそも
- 特定 UIImageView の image さえ表示できたらいい
- 画像の拡大・縮小表示ぐらいができたらいい
と、自分が求めているレベルぐらいであれば、自作も全然できるな...ということで、
この際つくるか!って思い立ちました。
カスタマイズ性はほぼ無いかわりに、使い方はいたって単純となっています(笑)
ちょっと欲を出して
上記に上げた2つの目的だけだと、流石にライブラリとしてあげるのが憚れたので、
Transition をちょっといじってみました(笑)
対象の画像位置を起点にズームしながら遷移していくっていう、よくあるやつですね〜
こっちのが手間で時間かかりましたね...(汗)
ハマりポイント
リソースどうやって読み込むんだ...
今回閉じるボタンのためにバツ画像を用意したのだけれど...
どうやって読み込むんだろう?と....いつもの感じだととりあえず駄目で
Bundle
をちゃんと指定する必要がある- Cocoapods がリソース系をまとめて .bundle ファイルに纏めちゃうので、そこから読み込む必要がある
って言うことらしい。
let bundle = Bundle(path: Bundle(for: ANZSingleImageViewer.self).path(forResource: "ANZSingleImageViewer", ofType: "bundle")!)
let image = UIImage(named: "icon_close", in: bundle, compatibleWith: nil)
ANZSingleImageViewer.self
で指定しつつ Bundle 作るのはわかる。
そのあとの、ANZSingleImageViewer.buldeを取りに行くとこがちょっとアレですよね。
多分 .podspec の s.resource_bundles で指定してる key が bundle のファイル名になるのかな。。。
Cocoapods に公開する時に少しハマった
pod lib lint
を実行すると、エラーが出まして...。
どうも Swift 3.x で lint 実行しようとしてる感じ。
ということで .swift-version っていうファイルを作って、
そこで Swift バージョンを指定してみたのですが、
これでもエラーがでたのです...。
どうしたのかというと、
.podspec のなかで s.swift_version = '4.2'
と記述すると回避できました
(.swift-version ファイルは消してもok)
ってことで、lint でそこらのエラーが吐かれた場合は、確認してみるといいかもしれません。
(エラー内容は消してしまったので...具体的にこれって書けない...🙏)
できるだけ簡単にこれぐらいの Viewer が欲しい方は是非。。!
そして、スターください!(スター乞食😇