anz blog

シンプルなImageViewerをつくった

2018-09-29 #Swift #CocoaPods

ざっくりまとめ。

  • ANZSingleImageViewer っていう画像ビューワーつくりました
    • 特定のUIImageを表示する
    • 拡大・縮小表示できる
    • ZoomTransition もできる
  • 開発話
    • つくった理由
    • ハマったところ

です。

環境

  • Xcode v10
  • Swift v4.2

ImageViewerつくった!

  • Swift 4.2 です!(笑)
  • UIImage を表示するだけシンプルなもの
    • URL を渡したらロードするとか、複数みられるとか..そういうのはなし
  • 画像の拡大・縮小はできます
    • ダブルタップとかピンチアウトとかで
  • Zoom Transition はできます!
    • シンプルを目指したとかいっておきながら、謎の...(笑)

さんぷる

うむ、なにいってるのよくわからん。っていう方のために(笑)

screenshot

なぜつくったのか

こういうものは他にもたくさんあるのだけれど...
使っていたものが、どうも 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 が欲しい方は是非。。!
そして、スターください!(スター乞食😇

参考

自作ライブラリのCocoaPods対応 - Qiita Unsplash