PickerをPopoverで表示するライブラリの紹介

##自己紹介
- iOSエンジニア 星野佑太(株式会社ジーニー代表 2009年〜)
- 自社開発の[ge-calc](https://itunes.apple.com/jp/app/memo-dian-zhuo-ge-calc-xiao/id388632863?mt=8) 71万ダウンロードを達成。
- WWDC2016に参加→[まとめ記事](http://www.slideshare.net/YutaHoshino/wwdc-2016-63663048)
- watchOS 3で解禁された[Digital Crown](http://www.slideshare.net/YutaHoshino/wwdcnext-2016)や[TableViewフォームを高速開発するためのEureka](http://www.slideshare.net/YutaHoshino/tablevieweureka)に関心があります。
- アカウントの紹介: [GitHub](https://github.com/hsylife/), [Twitter](https://twitter.com/hsylife), [Facebook](https://www.facebook.com/yuta.hoshino), [Qiita](http://qiita.com/hsylife), [SlideShare](http://www.slideshare.net/YutaHoshino)
- お問い合わせ: ythshn@ge-nie.co.jp

*この資料は、2016年10月6日に株式会社Fabricで開催されたshibuya.swiftでLTとして発表したものです。*

---
##SwiftyPickerPopoverの動作イメージ
![SwiftyPickerPopover_movie.gif](https://qiita-image-store.s3.amazonaws.com/0/84185/f42e502f-10ff-b09e-65e7-d308e697de94.gif)

![SwiftyPickerPopover_screenshot.jpg](https://qiita-image-store.s3.amazonaws.com/0/84185/e4251bcd-a4ff-efc2-2c6d-3ad9c9306581.jpeg)

---
##SwiftyPickerPopoverとは
- [SwiftyPickerPopover](https://github.com/hsylife/SwiftyPickerPopover)  https://github.com/hsylife/SwiftyPickerPopover
- Swift 3(あるいは2.3)で書いたライブラリで、PickerをPopoverスタイルでコード1行で表示できるもの。
- 2016年9月14日公開。95 Stars, 6 Forks, 3 Contributors。3回ほどPRをいただきました。

---
##用途
- 遷移させずに、何らかの日時やカウントダウン時間を得たい場合
- 同じく、文字列の選択肢をピッカーから選ばせたい場合
- iOS9でDeprecatedになったUIPopoverControllerを使っているライブラリの置き換えとしてサクッと使う
- UXにおいては、アクションシートスタイルのピッカーよりも指の移動量が減るので有利。
- 開発においては、iPadとiPhoneのUIを同じに保てる。デザインや実装の作業分岐が不要になる。

---
##開発背景
- iOS9でDeprecatedになったUIPopoverControllerを使っているライブラリの置き換えとして開発した。
- [ActionSheetPicker](https://github.com/TimCinel/ActionSheetPicker)は大変優れたObjective-CベースのライブラリですがUIPopoverControllerを前提にしている。

---

##特徴
- Swift 3(Swift 2.3のブランチもあります。詳しくはREADME.mdをご覧ください), Xcode 8, iOS9+に対応。iPhone, iPadいずれも対応。
- MITライセンス。
- 1行で記述できる。
- CocoaPodsやCarthageで簡単にインストールできる。
- 文字列を1カラムで選択させるピッカー、複数列で選択させるピッカー(※)、日時を選択するピッカー、カウントダウン時間のピッカーを用意(※)。

*※ Ken Torimaruさんのコントリビーションによります。オープンソース文化は本当に素晴らしいですね。*

---
##コードサンプル
文字列の選択をさせるピッカーStringPickerPopoverを表示させるコード。(下のスクリーンショットの一番左)

![SwiftyPickerPopover_screenshot.jpg](https://qiita-image-store.s3.amazonaws.com/0/84185/e4251bcd-a4ff-efc2-2c6d-3ad9c9306581.jpeg)


```swift
let displayStringFor:((String?)->String?)? = { string in
   if let s = string {
      switch(s){
      case "value 1":
        return "😊"
      case "value 2":
         return "😏"
      case "value 3":
         return "😓"
      default:
         return s
      }
    }
  return nil
  }

  StringPickerPopover.appearFrom(
   originView: button,
   baseViewController: self,
   title: "StringPicker",
   choices: ["value 1","value 2","value 3"],
   displayStringFor: displayStringFor,
   initialRow:0,
   doneAction: { selectedRow, selectedString in print("done row \(selectedRow) \(selectedString)")} ,
   cancelAction: { print("cancel")}
  )
```
originView: Pickerの入ったPopoverの起点となるView
baseViewController: 出現元となるViewController
title: Popoverのタイトル
choices: 選択肢の文字列の配列
displayStringFor: 内部的な選択肢と表示するための選択肢の置き換えを記述するクロージャー。省略可能。
initialRow: 初期選択ロー
doneAction: Doneボタンを押下した時に呼ばれるコールバック。選択されたRowと文字列を利用できる。
cancelAction: Cancelボタンを押された時やポップオーバーが閉じられた時の挙動。


---
##CocoaPodsへの自作ライブラリの登録手続き
- Swift 2.3の場合、ビルドのSwiftバージョンを指定するために、CocoaPods 1.1.0.rc2を今の時点では使う必要がある。早くv1.1.0が正式リリースされるとよいです。
- Xcode8でCocoaPodsにSwift2.3の自作ライブラリを登録するhttp://qiita.com/hsylife/items/e2b43f0ce930cb566f6c
- CocoaPodsに登録したライブラリの更新
http://qiita.com/hsylife/items/5102dd316fb14e05f044

---
##Carthage対応
Swift3製ライブラリをCarthage対応したときの手順
http://qiita.com/hsylife/items/19386c9b7c4132da1189

---
##ライブラリ公開の告知先
- せっかく作ったので、使う可能性のある人には広く告知したい。
- 英語でREADME.mdを書いた。ContributorやUserの層が広がる。
- CocoaPodsに登録すると公式サイトにREADME.mdの内容が紹介され、関連するサイトからツイートされる。
- まず身内にFacebookなどで紹介して反応をいただきました。
- facebookのグループ [iOS Developers JAPAN](https://www.facebook.com/groups/ios.dev.jp)に投稿した。日本語。
- [Swift iOS Development](https://www.facebook.com/groups/swiftiosdev/)に投稿した。英語。
- Qiitaでライブラリを紹介した。日本語。
- UI系ライブラリなので、[CocoaControl](https://www.cocoacontrols.com)や[iOS Cookies](https://ioscookies.typeform.com/to/QkUK7O)にも申請しました。

---
##ぜひ使ってみてください
- [SwiftyPickerPopover](https://github.com/hsylife/SwiftyPickerPopover)  https://github.com/hsylife/SwiftyPickerPopover
- 🌟をいただけるだけでメンテナンスするやる気が出ます。
- プルリクをいただけると本当にありがたいです。何かお気づきの点があればよろしくお願いします。