Objective-C
Xcode
iOS
Swift

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

More than 1 year has passed since last update.

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

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

今のところ21個のサンプルが入っています。随時追加していきます。機能追加プルリク大歓迎です!

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

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

Map Customizations

マップタイプで新たに指定できるようになった Flyover や、交通渋滞情報を表示する showsTraffic 等のサンプルです。

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

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

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

Flyover Map for iOS 9.

Text Detector

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

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

2種類の画像への処理結果を比較してみると、同じステッカーを認識させるにしても、下の画像のようにパースがかかって陰影もある場合はグッと精度が落ちる(台形補正や二値化等の前処理をする必要がある)ことがわかります。

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

New Image Filters

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

※今のところ29のフィルタを試せますが、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.SmartAlbumSelfPortraitsPHAssetMediaSubtype.PhotoScreenshot を利用し、フォトライブラリからセルフィー(自撮り)画像とスクリーンショットを抽出するサンプル。

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

String Transform

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

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

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

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

Core Image Transitions

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

  • CIRippleTransition
  • CIPageCurlTransition
  • CIPageCurlWithShadowTransition

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

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

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種類だったので、ひさびさの大幅追加ではないでしょうか。

Contacts

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

manhattan918 さんより pull request いただきました。

ReplayKit

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

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

swift
private let recorder = RPScreenRecorder.sharedRecorder()
swift
recorder.startRecordingWithMicrophoneEnabled(true) { [unowned self] error in
}

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

Contacts サンプルに引き続き、manhattan918 さんより pull request いただきました!

Quick Actions (3D Touch)

ホーム画面のアイコンを強タップすると出てくる例のメニューのサンプル。(要 3D Touch)

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

Force Touch (3D Touch)

3D Touch の押す強さを可視化するサンプル。マルチタップ可。UITouch に新規追加された forcemaximumPossibleForce プロパティを使用。(要 3D Touch)

Live Photos

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

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