iOS 9 でも大量の新機能が追加されましたが、新しいAPIはどう使うのか、実際に何がどこまでできるのか、といった具体的なところが、英語のドキュメントや動画をながめているだけだと正直あまりピンときません。やはり実際にコードを書いて動かしてみるのが一番わかりやすい・・・ということで今年もつくりました!
恒例の iOS 9 新機能のサンプルコード寄せ集めアプリです。ソースコードは GitHub に置いてあるので、ご自由にご活用いただけると幸いです。
使い方は Xcode 7 でビルドするだけ なので、デザイナーさんやディレクターさんもぜひお近くのエンジニアにビルドしてもらってください。
Swift のバージョン 2.0 やオープンソース化、ついにネイティブ対応する watchOS 2、といったわかりやすい進化に対し、かなり成熟してしまったからかあまり期待の声を聞かない(気がする) iOS 9 ですが、こうやってサンプルをつくりはじめてみると、「Search APIs」や「Content Blocker」、「3D Touch」といった話題に登りやすい機能以外にも、意外とおもしろい新機能がたくさんあると思うようになりました。
今のところ15個のサンプルが入っています。随時追加していきます。機能追加プルリク大歓迎です!
以下各サンプルの紹介です。
Map Customizations
マップタイプで新たに指定できるようになった Flyover や、交通渋滞情報を表示する `showsTraffic` 等のサンプルです。
特に Flyover は、Appleの「Maps」アプリでは以前から登場していたものの、サードパーティ製アプリで使えるようになったのは今回からで、下記のようにプロパティをセットするだけで、
mapView.mapType = MKMapType.SatelliteFlyover mapView.mapType = MKMapType.HybridFlyover
こんな感じのインパクトのある3Dマップ表示が可能となります。
Text Detector
CIDetector で新たに指定できるようになった `CIDetectorTypeText` を用いた文字認識のサンプル。
緑色の枠が検出した文字領域を示していて、(見づらいですが)黄色の枠は個々の文字領域を示しています。
2種類の画像への処理結果を比較してみると、同じステッカーを認識させるにしても、下の画像のようにパースがかかって陰影もある場合はグッと精度が落ちる(台形補正や二値化等の前処理をする必要がある)ことがわかります。
本機能については下記記事でも解説しています。
New Image Filters
CIFilter に追加された新しいフィルタのうち、静止画に対してかけられるものを試せるサンプル。
※今のところ29のフィルタを試せますが、`CIEdgeWork` と `CISpotLight` については正常に機能していません。filterAttributes 等も確認したのですが改善方法は不明。プルリクお待ちしております。
先日のスライド にも書いたとおり、今回のアップデートは Core Image (CIFilter)にとっては久々の大幅アップデートなので、このサンプルも見応えがあります。
Audio Unit Component Manager
新クラス AudioUnitComponentManager を使用して利用可能な Audio Unit Extension Component のリストを抽出し、サウンドに動的に適用するサンプル。
iOSデバイスに Audio Unit Extensions が入っていれば、それらも抽出されます。
右上の「ShowAUVC」ボタンは、選択中の Audio Unit Extension Component が画面(`AUViewController` を継承したクラス)を持っている場合に有効になります。
Speech Voices
「私は寿司が好きです」という文を世界各国の言語の合成音声でしゃべらせるサンプル。
CASpringAnimation
CASpringAnimation を用いたばね風アニメーションのサンプル。
下記記事を参考にさせていただきました。
UIStackView
UIStackView によりビューを追加しても自動的にレイアウト調整される、というサンプル。
Selfies & Screenshots
Photos フレームワークに追加されたサブタイプ、`PHAssetCollectionSubtype.SmartAlbumSelfPortraits` と`PHAssetMediaSubtype.PhotoScreenshot` を利用し、フォトライブラリからセルフィー(自撮り)画像とスクリーンショットを抽出するサンプル。
下記記事を参考にさせていただきました。
- Photos.framework で自撮り(selfie)画像の一覧を取得する - ObjecTips
- Photos.framework でスクリーンショット画像の一覧を取得する - ObjecTips
String Transform
地味だけどちょっとおもしろい新機能 "String transliteration"(字訳、音訳という意味らしい)のサンプル。
上はひらがなをカタカナに、また全角を半角に変換するサンプルで、下は "Hello, world!" をハングルやアラビア文字等の各種言語の文字に変換するサンプルです。
後者の言語(文字)の置き換えですが、翻訳ではなくあくまで字訳なので、たとえば `NSStringTransformLatinToHiragana` を指定した場合、"Hello, world!" の変換結果は 「へっろ、をるるで!」になります。実用的なのか何なのかよくわからない機能ですが、海外に行くと意味はわからずともとにかく読みたい、という場面もある(メニュー名とか)ので、需要はあるのかもしれません。
下記記事を参考にさせていただきました。
Search APIs
Search APIs のサンプル。NSUserActivity を使うものと、Core Spotlight を使うものの2種類が実装してあります。
Content Blockers
Content Blocker Extensions のサンプル。
下記記事を参考にさせていただきました。
SFSafariViewController
SFSafariViewController で WEB ページを開くシンプルなサンプル。
Attributes of New Filters
iOS 9 から、CIFilter の filterAttributes で取得できる属性情報のキーに `kCIAttributeFilterAvailable_iOS` というものが加わりました。このフィルタは iOS 8 から使えるようになったよ、とかそういう情報を示す属性です。本サンプルではこの属性を用いて iOS 9 で新規追加されたフィルタ 41 種類 を抽出し、その属性情報を表示しています。
CIFilter の新しいフィルタはすぐにはドキュメントに反映されなかったりするので、そういう場合にこの一覧が役立ちます。
関連記事:
Low Power Mode
iOS 9 から加わった「Low Power Mode」設定。これをアプリからon/offすることはできないのですが、設定変更を検知することはできます。そのサンプル(地味なのでスクショはなし)
New Fonts
iOS 9 で新規追加されたフォント 31 種類のサンプル。
iOS 8 のときは新規追加フォントはたったの7種類だったので、ひさびさの大幅追加ではないでしょうか。
おわりに
watchOS 2 のサンプル集はこちら!正式リリースされたらスクリーンショットを貼っていきます。