iOSアプリ開発 イケイケライブラリのすゝめ

ここ最近のiOSアプリ(特にツール系アプリ)を見るに、UI/UXのリッチ化がますます進んでいて、アニメーションであったりエフェクトであったりの豪華絢爛っぷりだけでお腹いっぱいになりそうである。それに伴って、企画やデザイナーのデザインに対する要望も上がっていて、その要望に１からすべて答えていたらいくら時間があっても足りなくなってしまう。
というわけで、開発工数削減のために使えるものは使おうということで、ライブラリのすゝめである。iOS開発においては世界中の天才エンジニア達がいかんなくその技術力を見せびらかし、イケてるライブラリを公開してくれている。これはありがたくその恩恵にあずかる以外の手はない。

## [KLCPopup](https://github.com/jmascia/KLCPopup)
iOSアプリ開発において必ずつきまとってくるポップアップのライブラリ。
ポップアップの表示,非表示アニメーションのカスタマイズからポップアップ表示時のタップ制御のカスタマイズはもちろん、ポップアップ表示時, 非表示時のイベント取得ももちろん網羅している。ポップアップのライブラリは一般的にタイトル, メッセージ, ボタンテキストを指定するタイプのものが多いが、こちらは自前でUIViewを用意してまるごと突っ込むタイプ。一見面倒くさそうに思えるが、近年のリッチ化事情はポップアップにまで及んでいて、ポップアップの見た目をかなり凝ったデザインであげてくるケースが多くなっており、デザインに関しては汎用的にできる方が逆に使いやすいというのが自分の見解である。

<img src="https://camo.githubusercontent.com/fa55b0b8650bb99023a3aee5c1fa891a01832b57/687474703a2f2f692e696d6775722e636f6d2f42456d524762352e676966" width="300">

## [MBProgressHUD](https://github.com/jdg/MBProgressHUD)
これまたiOSアプリ開発において必ずつきまとってくるプログレスのライブラリ。
プログレスのライブラリは数多くあるが、コレが一番カスタマイズ性と使いやすさのバランスがよかった。

<img src="https://dl.dropboxusercontent.com/u/378729/MBProgressHUD/v1/2.png" width="300">

## [PageMenu](https://github.com/uacaps/PageMenu)
スクロールページングの機能を簡単に実装できるライブラリ。
上部のメニュー(タブっぽいヤツ)もいい感じ。デザインもかなり柔軟にカスタマイズできて、オリジナリティ感をだせるのもポイントが高い。各ページにはUIViewControllerを突っ込む仕組みになっているので、ページを追加したり減らしたりするのも非常に容易でメンテナンス性も良い。各ページのライフサイクルさえ見誤らなければ、動きもサクサクで快適だ。

<img src="https://raw.githubusercontent.com/uacaps/ResourceRepo/master/PageMenu/PageMenuDemo.gif" width="300">

## [LGSideMenuController](https://github.com/Friend-LGA/LGSideMenuController)
サイドメニューを実装したくてライブラリを探していたところ、コイツに出会ってしまった。サイドメニューはついに二次元の壁を超えて、三次元の世界へと辿り着いてしまったようである。カッコイイ。思わず使いたくなってしまう。
もちろん普通のサイドメニューも用意されていて、設定で簡単に切り替えることができる。また、メイン画面とサイドメニュー画面の管理も非常に丁寧で、コードをキレイに保つことができるのも高評価である。

<img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/master/LGSideMenuController/Preview1.gif" width="300">

## [EAIntroView](https://github.com/ealeksandrov/EAIntroView)
アプリ初回起動時などに、アプリ説明(チュートリアル)をウォークスルーで表示するライブラリ。
とりあえず画面分の画像を用意して突っ込めばチュートリアルのできあがり。チュートリアルとか、これくらいでいいよね…？一応、テキストであったりボタンであったりも差し込めるし、画面毎にイベントも取得できるので、カスタマイズ性も高い。また、UIViewでできているので、どこでも表示できるのも使いやすかった。

<img src="https://raw.githubusercontent.com/ealeksandrov/EAIntroView/master/Screenshot01.png" width="300">

## [JDFPeekabooCoordinator](https://github.com/JoeFryer/JDFPeekaboo)
テーブルビューなどでスクロールするとナビゲーションバーがひっこむヤツ。
スクロールビューのスクロールとナビゲーションバー表示位置の連動制御の方法は、ライブラリによってかなり違いがあり、ライブラリを導入すると他の部分に影響が出てしまうことがしばしばあったので注意が必要である。こちらはスタンドアローンのマネージャー形式の仕様だったので、使い勝手が良かった。

<img src="https://github.com/JoeFryer/JDFPeekaboo/raw/master/Screenshots/Peekaboo.gif" width="300">

## [ADTransitionController](https://github.com/applidium/ADTransitionController)
画面遷アニメーションをカスタムするライブラリ。
UIViewControllerAnimatedTransitioningを使った画面遷移アニメーションのカスタムクラス群なのだが、クラス構成が非常にキレイで実装が丁寧なので気に入った。実際にはやりたいアニメーションが足りなかったので、このライブラリを参考に新規で作ってしまったのだが、それくらいにわかりやすく為になるコードだった。

## [CHTCollectionViewWaterfallLayout](https://github.com/chiahsien/CHTCollectionViewWaterfallLayout)
UICollectionViewでPinterest風なWaterfallを実現するライブラリ。
UICollectionViewでサイズが違うアイテムを並べようと思うと、意外とめんどくさかったりする。それくらいはやってくれよと思うのだが、できないものはしょうがない。ライブラリを使いましょう。

<img src="https://cloud.githubusercontent.com/assets/474/3419095/25b4de9e-fe56-11e3-9b98-690319d736ce.png" width="300">

## [ActionSheetPicker](https://github.com/skywinder/ActionSheetPicker-3.0)
ピッカーを実装するライブラリ。
iOS8からUIActionSheetが非推奨となり、もともとめんどくさかったピッカーの実装がいよいよめんどくさくなった。というわけでこちら、ActionSheetPicker。UIActionSheetの代わりに推奨されているUIAlertControllerを使っているわけではなく、完全にUIViewで独自に作り上げている。ただ、タイトルやボタンのデザインはかなり柔軟にカスタマイズでき、動きも非常に良いのでむしろラッキー。また、DatePickerだけではなく様々なピッカーに対応しているので、何かユーザーに選択させたいときはコレひとつで統一されたUIで実装できるので便利。

<img src="https://github.com/skywinder/ActionSheetPicker-3.0/raw/master/Screenshots/example.gif" width="300">

## [FlatUIKit](https://github.com/Grouper/FlatUIKit)
iOSフラットUIコンポーネント群のライブラリ。
ボタンなどのデザインに時間がかけられないときに、ちょっとだけ手を加えて統一感を出したいときに重宝する。

## [MaterialKit](https://github.com/nghialv/MaterialKit)
FlatUIKitに続いて、こちらもUIコンポーネント群のライブラリ。
Androidが提唱している"マテリアルデザイン"からインスパイアされているあたりに、大きな矛盾と悪意を感じるが、手軽にリッチなUXを導入できるのでよしとする。なによりRippleEffect気持ちいい。FlatUIKitよりももう少し頑張りたいときにいい感じ。

<img src="https://github.com/nghialv/MaterialKit/raw/master/Assets/MKButton.gif" width="300">

## [MSCellAccessory](https://github.com/bitmapdata/MSCellAccessory)
セルアクセサリーのUIコンポーネント群のライブラリ。
デ「セルの矢印の色、赤にできますかー？」
U「あっ、おｋです、やっときますねー！」
U「画像必要じゃねぇか！」
というわけでコレ、MSCellAccessory。

<img src="https://camo.githubusercontent.com/1f75088b401289ed9fac31998a5545aeaba5b893/68747470733a2f2f7261772e6769746875622e636f6d2f6269746d6170646174612f4d5343656c6c4163636573736f72792f6d61737465722f4d5343656c6c4163636573736f727944656d6f2f53637265656e53686f74322e706e67" width="500">

## [RKNotificationHub](https://github.com/cwRichardKim/RKNotificationHub)
アプリアイコンバッジ風のバッジをアプリ内で表示するライブラリ。
色や表示アニメーションもカスタマイズできるので、こういった小さな作業でも一瞬で完了できるのがライブラリの強み。

<img src="https://camo.githubusercontent.com/e09d52d46624bc3e5809c5f071882cfc8d49a7bf/687474703a2f2f692e696d6775722e636f6d2f537045324251762e676966" width="500">

## ライブラリを活用してらくらくアプリ開発
いかがだっただろうか？これまでにご紹介したライブラリたちを組み合わせるだけで、ぐいぐい動くアプリが１本作れる気がしてこないだろうか？
上記以外にもたくさんご紹介したいライブラリがあるのだが、今回はこのくらいにしておこう。
iOSのライブラリは本当に様々なライブラリがあり、その発想に驚かされるものもあり探している最中も開発者冥利につきる。ライブラリの中身をみてコードを眺めるだけでも、新たな発見がたくさんあり楽しいものだ。
是非お気に入りのライブラリを発見して、楽しくアプリ開発ライフを送ろう。

###### Created by [株式会社デジタルクエスト](https://www.digiq.co.jp) 森田 貴規