iOS 9 の新機能のサンプルコード集

恒例の **iOS 9 新機能のサンプルコード寄せ集めアプリ** です。ソースコードは GitHub に置いてあるので、ご自由にご活用いただけると幸いです。

- https://github.com/shu223/iOS-9-Sampler

![](http://f.st-hatena.com/images/fotolife/s/shu223/20150917/20150917065537.jpg)



使い方は <b>Xcode 7 でビルドするだけ</b>。こんな感じでサンプルのリストが出ます。

<img src="http://f.st-hatena.com/images/fotolife/s/shu223/20150917/20150917073141.jpg" width="280">


今のところ<span class="deco" style="font-weight:bold;">21個</span>のサンプルが入っています。随時追加していきます。機能追加プルリク大歓迎です！

「Search APIs」や「Content Blocker」、「3D Touch」といった話題に登りやすい機能以外にも、意外とおもしろい新機能がたくさんあるので、ぜひお試しください。



以下各サンプルのご紹介。


##Map Customizations

マップタイプで新たに指定できるようになった Flyover や、<span class="deco" style="font-weight:bold;">交通渋滞</span>情報を表示する `showsTraffic` 等のサンプルです。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/map2.jpg" width="405">


特に Flyover は、Appleの「Maps」アプリでは以前から登場していたものの、サードパーティ製アプリで使えるようになったのは今回からで、下記のようにプロパティをセットするだけで、

```objc:objc
mapView.mapType = MKMapType.SatelliteFlyover
mapView.mapType = MKMapType.HybridFlyover
```


こんな感じのインパクトのある<b>3Dマップ表示</b>が可能となります。


<iframe src="http://player.vimeo.com/video/139515043" width="250" height="444" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> <p><a href="https://vimeo.com/139515043">Flyover Map for iOS 9</a>.</p>


##Text Detector

CIDetector で新たに指定できるようになった `CIDetectorTypeText` を用いた<b>文字認識</b>のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/textdetector.jpg" width="200">


緑色の枠が検出した文字領域を示していて、（見づらいですが）黄色の枠は個々の文字領域を示しています。


2種類の画像への処理結果を比較してみると、同じステッカーを認識させるにしても、下の画像のようにパースがかかって陰影もある場合はグッと<span class="deco" style="color:#FF0000;">精度が落ちる（台形補正や二値化等の前処理をする必要がある）</span>ことがわかります。


本機能については下記記事でも解説しています。

- [【iOS9】Core Image の新機能：文字認識 ／追加フィルタ47種 - Over&Out その後](http://d.hatena.ne.jp/shu223/20150622/1434924215)


##New Image Filters

CIFilter に追加された新しいフィルタのうち、静止画に対してかけられるものを試せるサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/imagefilters.gif">


<span class="deco" style="font-size:small;">※今のところ29のフィルタを試せますが、`CISpotLight` については正常に機能していません。filterAttributes 等も確認したのですが改善方法は不明。プルリクお待ちしております。</span>


[先日のスライド](http://d.hatena.ne.jp/shu223/20150622/1434924215) にも書いたとおり、今回のアップデートは Core Image （CIFilter）にとっては久々の大幅アップデートなので、このサンプルも見応えがあります。


##Audio Unit Component Manager

新クラス AudioUnitComponentManager を使用して利用可能な Audio Unit Extension Component のリストを抽出し、サウンドに動的に適用するサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/aucomponents.jpg" width="200">


iOSデバイスに Audio Unit Extensions が入っていれば、それらも抽出されます。

- http://d.hatena.ne.jp/shu223/20150624/1435098847


右上の「ShowAUVC」ボタンは、選択中の Audio Unit Extension Component が画面（`AUViewController` を継承したクラス）を持っている場合に有効になります。


##Speech Voices

「私は寿司が好きです」という文を<b>世界各国の言語の合成音声でしゃべらせる</b>サンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/speech.jpg" width="200">


##CASpringAnimation

CASpringAnimation を用いたばね風アニメーションのサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/spring.gif">


下記記事を参考にさせていただきました。

- http://qiita.com/kaway/items/b9e85403a4d78c11f8df


##UIStackView

UIStackView によりビューを追加しても自動的にレイアウト調整される、というサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/uistackview.gif">


##Selfies & Screenshots

Photos フレームワークに追加されたサブタイプ、`PHAssetCollectionSubtype.SmartAlbumSelfPortraits` と`PHAssetMediaSubtype.PhotoScreenshot` を利用し、フォトライブラリからセルフィー（自撮り）画像とスクリーンショットを抽出するサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/screenshots.jpg" width="200">


下記記事を参考にさせていただきました。

- http://koze.hatenablog.jp/entry/2015/07/23/090000
- http://koze.hatenablog.jp/entry/2015/06/24/230000


##String Transform

地味だけどちょっとおもしろい新機能 "String transliteration"（字訳、音訳という意味らしい）のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/stringtransform.jpg" width="200">


上は<b>ひらがなをカタカナに</b>、また<b>全角を半角に</b>変換するサンプルで、下は "Hello, world!" をハングルやアラビア文字等の<b>各種言語の文字に変換</b>するサンプルです。


後者の言語（文字）の置き換えですが、<span class="deco" style="color:#FF0000;">翻訳ではなくあくまで字訳</span>なので、たとえば `NSStringTransformLatinToHiragana` を指定した場合、"Hello, world!" の変換結果は <span class="deco" style="color:#FF0000;">「へっろ、をるるで！」</span>になります。実用的なのか何なのかよくわからない機能ですが、<b>海外に行くと意味はわからずともとにかく読みたい</b>、という場面もある（メニュー名とか）ので、需要はあるのかもしれません。


下記記事を参考にさせていただきました。

- http://nshipster.com/ios9/


##Core Image Transitions

CIFilter の `CITransitionCategory` に追加された３つのトランジションエフェクト用フィルタ、

- `CIRippleTransition`
- `CIPageCurlTransition`
- `CIPageCurlWithShadowTransition`

を利用した<b>カスタム画面遷移エフェクト</b>のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/ripple.gif">


Core Image をカスタム画面遷移エフェクトに利用する方法についての詳細は下記記事・スライドも併せてご参照ください。

- http://d.hatena.ne.jp/shu223/20151008/1444259843


<iframe src="//www.slideshare.net/slideshow/embed_code/key/buzdoMjk06nD7k" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/t26v0748/core-image-tips-tricks-in-ios-9" title="Core Image Tips &amp; Tricks in iOS 9" target="_blank">Core Image Tips &amp; Tricks in iOS 9</a> </strong> from <strong><a href="//www.slideshare.net/t26v0748" target="_blank">Shuichi Tsutsumi</a></strong> </div>


##Search APIs

Search APIs のサンプル。NSUserActivity を使うものと、<b>Core Spotlight</b> を使うものの2種類が実装してあります。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/searchapis.jpg" width="200">


##Content Blockers

Content Blocker Extensions のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/blocker.jpg" width="200">


下記記事を参考にさせていただきました。

- http://www.toyship.org/archives/2182


##SFSafariViewController

SFSafariViewController で WEB ページを開くシンプルなサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/safari.jpg" width="200">


##Attributes of New Filters

iOS 9 から、CIFilter の filterAttributes で取得できる属性情報のキーに `kCIAttributeFilterAvailable_iOS` というものが加わりました。このフィルタは iOS 8 から使えるようになったよ、とかそういう情報を示す属性です。本サンプルではこの属性を用いて <b>iOS 9 で新規追加されたフィルタ 41 種類</b> を抽出し、その属性情報を表示しています。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/filterattributes.jpg" width="405">


CIFilter の新しいフィルタはすぐにはドキュメントに反映されなかったりするので、そういう場合にこの一覧が役立ちます。


関連記事：

- http://d.hatena.ne.jp/shu223/20150622/1434924215


##Low Power Mode

iOS 9 から加わった「Low Power Mode」設定。これをアプリからon/offすることはできないのですが、設定変更を検知することはできます。そのサンプル（地味なのでスクショはなし）


##New Fonts

<b>iOS 9 で新規追加されたフォント 31 種類</b>のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/fonts.jpg" width="200">


[iOS 8 のとき](http://d.hatena.ne.jp/shu223/20140918/1410979802) は新規追加フォントはたったの7種類だったので、ひさびさの大幅追加ではないでしょうか。


##Contacts

iOS 9 で新規追加された Contacts framework のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/contacts.jpg" width="200">


[manhattan918](https://github.com/manhattan918) さんより pull request いただきました。


##ReplayKit

iOS 9 で新規追加された ReplayKit framework のサンプル。


下記のような非常に簡単なコードで

```swift:swift
private let recorder = RPScreenRecorder.sharedRecorder()
```

```swift:swift
recorder.startRecordingWithMicrophoneEnabled(true) { [unowned self] error in
}
```


こんな<b>動画スクリーンキャプチャを録る</b>ことができます。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/replaykit.jpg" width="200">


Contacts サンプルに引き続き、[manhattan918](https://github.com/manhattan918) さんより pull request いただきました！


##Quick Actions (3D Touch)  

ホーム画面のアイコンを強タップすると出てくる例のメニューのサンプル。（<span class="deco" style="color:#FF0000;font-weight:bold;">要 3D Touch</span>）


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/shortcut.jpg" width="200">


実装は Info.plist の `UIApplicationShortcutItems` キーと、AppDelegate の `application:performActionForShortcutItem:completionHandler:` メソッドにあります。


##Force Touch (3D Touch)

3D Touch の押す強さを可視化するサンプル。マルチタップ可。UITouch に新規追加された `force` と `maximumPossibleForce` プロパティを使用。（<span class="deco" style="color:#FF0000;font-weight:bold;">要 3D Touch</span>）


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/forcetouch.gif" width="200">


##Live Photos

iOS 9.1 で追加された `PHLivePhoto` と `PHLivePhotoView` を使用してライブフォトを表示するサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/livephoto.gif" width="200">


こちらに実装の解説記事を書きました。

- http://qiita.com/shu223/items/e87ea139512ba732997d