WWDCでのアップルの発表によると、iOS 8 では4000以上もの API が追加されたとのことですが、新しいAPIはどう使うのか、実際に何がどこまでできるのか、といった具体的なところが、英語のドキュメントや動画をながめているだけだと正直あまりよくわかりません。やはり実際にコード書いて動かしてみるのが一番わかりやすい、ということで今年もつくりました、
iOS 8 新機能のサンプルコード寄せ集めアプリ『iOS8-Sampler』
ソースコードは GitHub に置いてあります。
https://github.com/shu223/iOS8-Sampler
※使い方は Xcode 6 でビルドするだけ なので、デザイナーさんやディレクターさんもぜひ最寄りのエンジニアにビルドしてもらってください。
中身について
今回はデザイナー okazu 氏の協力により立派なアイコンやスプラッシュ画像が最初から用意されていますが、中身は何のことはない、iOS 7 のときと同様のテーブルビューです。(※ここで凝るとサンプル追加が大変になる)
今のところ24個のサンプルが入っています。何か調べた折に随時追加していきます。機能追加プルリク大歓迎です!
以下サンプルのリストです。
Audio Effects
iOS の Core Audio においてもっとも低レイヤに位置し、リアルタイムで高度なオーディオ波形処理や、複雑なルーティングによるオーディオ処理を実現することができる Audio Unit というのが従来からあったのですが、これらは AVFoundation 等に比べると少々複雑で、しかもAPIがC言語タイプなので、自分のようなゆとりiOSエンジニアには少しハードルが高い部分がありました。
- http://d.hatena.ne.jp/shu223/20140506/1399406906
- http://d.hatena.ne.jp/shu223/20130221/1361394373
- iOSで使用できる Audio Unit 一覧 - Qiita
iOS 8 で追加された AVAudioEngine は、Audio Unit の Objective-C ラッパー的な存在で、上記のAudio Unitのハードルの高さを解消してくれています。
ギターのエフェクターのようにユニットを繋げる楽しさも健在で、本サンプルでは、ディストーションとか、ディレイといったエフェクトを音にかける実装方法を提示しています。使用している新クラスは AVAudioEngine, AVAudioUnitDistortion, AVAudioUnitDelay, AVAudioPlayerNode, AVAudioFile 等々。
New Image Filters
Core Image の CIFilter に追加された新しいフィルタ集。iOS 8 の Built-in フィルタは127種類あるのですが、新たに追加されたのは13種類 *1 で、本サンプルでは以下の6種類が試せるようになっています。
- CIGlassDistortion
- CIDivideBlendMode
- CILinearBurnBlendMode
- CILinearDodgeBlendMode
- CIPinLightBlendMode
- CISubtractBlendMode
関連記事:
Custom Filters
iOS 8 では CIKernel というクラスが追加され、Core Image のフィルタ(CIFilter)を自作できるようになりました。
これを用いたシンプルなフィルタの作成手順を以前記事に書きましたが、
本サンプルでは、この CIKernel を用いたサンプルを4種類、実装してあります *2。
Metal Basic
Metal を使ったシンプルな描画サンプルです。Apple公式サンプルの "MetalBasic3D" をベースに作成。
Metal Uniform Streaming
Metal のサンプルその2。同名のApple公式サンプルをベースに作成。
SceneKit
Mac には以前からあり、iOS には 8 で初めて追加された SceneKit のサンプル。Appleのサンプルがどれも最初の一歩目にはややこしいと感じたので、アイコン画像を3D空間に置いてライティングするだけのシンプルなサンプルです。
HealthKit
iOS 8 の注目の新機能の1つ、HealthKit のサンプル。HealthKitで利用可能なデータ全種類を読み出すことができます。
が、データがないと始まらないので、まずはオフィシャルの Health アプリをいろいろ使ってみてデータを作成してください。
あと、プロビジョニングプロファイルの件も忘れずに。。
TouchID
指紋認証のデモ。iPhone5sなど、対応デバイスでお試しください。 LocalAuthentication フレームワークを使用。
Touch Radius
UITouch の新プロパティ `majorRadius` を使用し、タッチの強さ(半径)を可視化するサンプル。
参考記事:
Visual Effects
UIView にブラーエフェクトをかけられる、すなわちあの「磨りガラス効果」を実現するための新クラス、UIBlurEffect と UIVibrancyEffect のサンプルです。
Table Separator Effect
UITableView に追加された `separatorEffect` プロパティのサンプル。セパレータにエフェクト (UIVisualEffect)をかけられます。
Ruby Annotation
Core Text に追加された CTRubyAnnotationRef を用いて、文字列にルビ(ふりがな)を付けて描画するサンプル。
クラスメソッドさんの記事を参考にさせていただきました!
WebKit
WKWebView のサンプル。ロード中のプログレスがとれるようになったので、それを SVProgressHUD に反映して表示しています。
UIAlertController
UIAlertController を用いた Alert と ActionSheet のサンプル。
User Notification
Schedule a local notification which has custom actions using UIUserNotificationSettings.
Altimeter
新たに追加された CMAltimeter クラスを使って相対的な高度と気圧を取得するサンプル。要 M8 コプロセッサ、ということで2014年9月現在、iPhone 6 または iPhone 6 Plus でのみ動作します。
参考記事:
Pedometer
新たに追加された CMPedometer クラスを使って歩数情報を取得するサンプル。
AVKit
新たに追加された AVKit framework の AVPlayerViewController を使って動画をストリーミング再生するサンプル。
Histogram
Core Image の CIFilter に新たに追加された CIAreaHistogram と CIHistogramDisplayFilter を使用して画像のヒストグラムを計算、表示するサンプル。
Code Generator
2次元コード(AztecCode)と 128規格のバーコードを生成するサンプル。Core Image の CIFilter に新たに追加された CIAztecCodeGenerator と CICode128BarcodeGenerator を使用。
New Fonts
iOS 8 で追加された 7 種類のフォントのサンプル。
- AppleSDGothicNeo-UltraLight
- KohinoorDevanagari-Light
- KohinoorDevanagari-Medium
- KohinoorDevanagari-Book
- DamascusLight
- LaoSangamMN
- KhmerSangamMN
ちなみに iOS 7 で追加されたフォント 37 種類のリストはこちら:
Popover
UIPopoverPresentationController のサンプル。
Table Row Action
UITableViewRowAction のサンプル。UITableViewのセルをスワイプして出るメニューのふるまいや見た目をカスタマイズできます。(見た目が地味なのでスクショは省略しました。)
Accordion Fold Transition
CIFilter の CIAccordionFoldTransition を用いたアコーディオンのように折り畳まれるような遷移エフェクト・・・のはずなのですが現状そのように動作していません。GitHub や Google で検索してもまったく先行例がないので、どなたか成功した方、プルリクお待ちしております。。
おわりに
新機能の実装記事もこれからどんどん書いていきます!
以下これまでに書いたもの。
- http://d.hatena.ne.jp/shu223/20140605/1401927354
- http://d.hatena.ne.jp/shu223/20140622/1403475268
- http://d.hatena.ne.jp/shu223/20140623/1403478080
- http://d.hatena.ne.jp/shu223/20140708/1404758864
- http://d.hatena.ne.jp/shu223/20140606/1402015233
- http://d.hatena.ne.jp/shu223/20140607/1402416458