LoginSignup
7
5

More than 5 years have passed since last update.

iOS向けのスライドショーUIライブラリを作った

Posted at

↓こういうやつ

slideviewer.gif

使い方

画像URLの配列の場合

let v = SlideViewerController.setup(
    mainImageURLs: [
        URL(string: "https://example.com/path/to/slide/1.png")!,
        URL(string: "https://example.com/path/to/slide/2.png")!,
        ...
    ],
    thumbImageURLs: [
        URL(string: "https://example.com/path/to/slide/thumb/1.png")!,
        URL(string: "https://example.com/path/to/slide/thumb/2.png")!,
        ...
    ]
)
present(v, animated: true)

PDFファイルのURLの場合

let pdfURL = "https://speakerd.s3.amazonaws.com/presentations/50021f75cf1db900020005e7/speakerdeck.pdf"
let v = SlideViewerController.setup(pdfFileURL: URL(string: pdfURL)!)
present(v, animated: true, completion: nil)

バンドルされたPDFファイルの場合

let path = Bundle.main.path(forResource: "speakerdeck", ofType: "pdf")
let url = URL(fileURLWithPath: path!)
let doc = PDFDocument(url: url)
let v = SlideViewerController.setup(pdfDocument: doc!)
present(v, animated: true)

ここがイケてる :smile:

  • SlideShareアプリのUI・挙動をほぼ完コピした
    • ビューアーとして本家並には使いやすいと思う
  • 複数のインプット形式に対応している
    • 画像URLの配列, PDFファイルのURL, ローカルのPDFファイル
    • スライドショー的な用途もあるし、単にPDFビューアーとしても使える
  • 縦・横どちらにも対応している

ここがイケてない :cry:

  • 画像のダウンロード順の賢い制御はしてない
    • キューに全画像のダウンロードタスクをいれて、裏でダウンロードしておくとよりUX良さそうだけどやっていない
  • たまに画像サイズの調整がバグる
  • carthage対応まだしてない

実装時の工夫ポイント

  • 画像のリサイズなどの[重い処理かつバックグラウンドスレッドで実行できる処理]はできるだけそちらでやるようにした
    • UIがカクつかずスムーズ
  • ReSwiftを使っており、ステートの管理がシンプルにできている
    • 素朴に実装していたらもうちょっと複雑なコードになってしまった気がする

おまけ

このライブラリは、実は下記の記事で作りかけで放置していたもの
https://qiita.com/abeyuya/items/6587a8f3990606f40429

社内でiOSエンジニアで集まって勉強会的なことやろう、ということになり、その発表でこのライブラリについて話すことになった
実装はほぼ完了していたし、せっかくなのでライブラリとしてリリースできる状態に最低限は整備した
せっかくなのでqiitaでも記事にしようと思った

7
5
0

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
7
5