iOS 8 の新機能のサンプルコード集『iOS8-Sampler』



iOS 8 新機能のサンプルコード寄せ集めアプリ『iOS8-Sampler』をつくりました。


<img src="https://camo.githubusercontent.com/6d3a1c9e5f8fcee78eb961463a87fdd1afa165ab/687474703a2f2f662e636c2e6c792f6974656d732f30573269304531353173304233533378334533572f6f67705f2e6a7067" width="600">



ソースコードは GitHub に置いてあります。


https://github.com/shu223/iOS8-Sampler


<img src="https://camo.githubusercontent.com/74e83c7b6a22c67495442137e5dfbbbe2a142d59/687474703a2f2f662e636c2e6c792f6974656d732f326d3057333130583066304a325a3062306f32722f746f702e6a7067" width="240">


今のところ24個のサンプルが入っています。何か調べた折に随時追加していきます。機能追加プルリク大歓迎です！


以下サンプルのリストです。


##Audio Effects

iOS の Core Audio においてもっとも低レイヤに位置し、<b>リアルタイムで高度なオーディオ波形処理</b>や、<b>複雑なルーティングによるオーディオ処理</b>を実現することができる Audio Unit というのが従来からあったのですが、これらは AVFoundation 等に比べると少々複雑で、しかもAPIがC言語タイプなので、自分のようなゆとりiOSエンジニアには少しハードルが高い部分がありました。

- [Audio Unit 再入門](http://d.hatena.ne.jp/shu223/20140506/1399406906)
- [ダウンロード可能な Audio Unit 関連のサンプルコード11個](http://d.hatena.ne.jp/shu223/20130221/1361394373)
- [CoreAudio - iOSで使用できる Audio Unit 一覧](http://qiita.com/shu223/items/b56a8eba2f77ae672da2)

iOS 8 で追加された AVAudioEngine は、Audio Unit の Objective-C ラッパー的な存在で、上記のAudio Unitのハードルの高さを解消してくれています。


ギターのエフェクターのようにユニットを繋げる楽しさも健在で、本サンプルでは、ディストーションとか、ディレイといったエフェクトを音にかける実装方法を提示しています。使用している新クラスは AVAudioEngine, AVAudioUnitDistortion, AVAudioUnitDelay, AVAudioPlayerNode, AVAudioFile 等々。


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

                   
##New Image Filters

Core Image の CIFilter に追加された新しいフィルタ集。iOS 8 の Built-in フィルタは127種類あるのですが、新たに追加されたのは13種類 ((調べたのベータ版の頃なので、ひょっとしたら増えてるかも。。)) で、本サンプルでは以下の6種類が試せるようになっています。

- CIGlassDistortion
- CIDivideBlendMode
- CILinearBurnBlendMode
- CILinearDodgeBlendMode
- CIPinLightBlendMode
- CISubtractBlendMode


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


関連記事：

- [Core Image の遷移エフェクトを使う](http://d.hatena.ne.jp/shu223/20130311/1362962817)
- [Core Image の全エフェクトを試せるサンプルコードを公開しました](http://d.hatena.ne.jp/shu223/20121217/1355711014)


##Custom Filters

iOS 8 では CIKernel というクラスが追加され、Core Image のフィルタ（CIFilter）を自作できるようになりました。


これを用いたシンプルなフィルタの作成手順を以前記事に書きましたが、

- [CIKernel を使ったカスタムフィルタのつくりかた](http://d.hatena.ne.jp/shu223/20140623/1403478080)


本サンプルでは、この　CIKernel を用いたサンプルを4種類、実装してあります ((WWDC2014のスライドを参考に実装))。


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


##Metal Basic

Metal を使ったシンプルな描画サンプルです。Apple公式サンプルの "MetalBasic3D" をベースに作成。


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


##Metal Uniform Streaming

Metal のサンプルその２。同名のApple公式サンプルをベースに作成。


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


##SceneKit

Mac には以前からあり、iOS には 8 で初めて追加された SceneKit のサンプル。<span class="deco" style="color:#FF0000;">Appleのサンプルがどれも最初の一歩目にはややこしい</span>と感じたので、アイコン画像を3D空間に置いてライティングするだけのシンプルなサンプルです。


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


##HealthKit

iOS 8 の注目の新機能の1つ、HealthKit のサンプル。HealthKitで利用可能なデータ全種類を読み出すことができます。


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


が、データがないと始まらないので、まずはオフィシャルの Health アプリをいろいろ使ってみてデータを作成してください。


あと、プロビジョニングプロファイルの件も忘れずに。。

- [HealthKit の Apple 公式サンプルを実機で動作させようとすると出るエラーの対処方法](http://d.hatena.ne.jp/shu223/20140607/1402416458)
- [いますぐ試せる HealthKit & HomeKit](http://d.hatena.ne.jp/shu223/20140622/1403475268)


##TouchID

指紋認証のデモ。iPhone5sなど、対応デバイスでお試しください。 LocalAuthentication フレームワークを使用。


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


##Touch Radius

UITouch の新プロパティ `majorRadius` を使用し、タッチの強さ（半径）を可視化するサンプル。


<img src="https://github.com/shu223/iOS8-Sampler/blob/master/ResourcesForREADME/touch_radius.gif?raw=true">


参考記事：

- [iOS8からUITouchにタッチ半径を測定するプロパティがある](http://qiita.com/yimajo/items/ce6ae6c2159deb69a781)

##Visual Effects

UIView にブラーエフェクトをかけられる、すなわちあの「磨りガラス効果」を実現するための新クラス、UIBlurEffect と UIVibrancyEffect のサンプルです。


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


##Table Separator Effect

UITableView に追加された `separatorEffect` プロパティのサンプル。セパレータにエフェクト （UIVisualEffect）をかけられます。


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


##Ruby Annotation

Core Text に追加された CTRubyAnnotationRef を用いて、文字列にルビ（ふりがな）を付けて描画するサンプル。


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


クラスメソッドさんの記事を参考にさせていただきました！

- [CTRubyAnnotationRef を使って文字にルビを付ける](http://dev.classmethod.jp/references/ios8-ctrubyannotationref/)

##WebKit

WKWebView のサンプル。ロード中のプログレスがとれるようになったので、それを SVProgressHUD に反映して表示しています。


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


##UIAlertController

UIAlertController を用いた Alert と ActionSheet のサンプル。


<img src="https://raw.githubusercontent.com/shu223/iOS8-Sampler/master/ResourcesForREADME/alert.jpg" height="355">


##User Notification

Schedule a local notification which has custom actions using UIUserNotificationSettings.


<img src="https://raw.githubusercontent.com/shu223/iOS8-Sampler/master/ResourcesForREADME/notification.jpg" height="355">


##Altimeter

新たに追加された CMAltimeter クラスを使って **相対的な高度** と **気圧** を取得するサンプル。 **要 M8 コプロセッサ**、ということで2014年9月現在、iPhone 6 または iPhone 6 Plus でのみ動作します。


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


参考記事：

- [iPhone 6 / iPhone 6 Plus で使える新機能！ CMAltimeter で高度を取得する](http://dev.classmethod.jp/references/ios8-cmaltimeter/)


##Pedometer

新たに追加された CMPedometer クラスを使って歩数情報を取得するサンプル。


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


##AVKit

新たに追加された AVKit framework の AVPlayerViewController を使って動画をストリーミング再生するサンプル。


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

                   
##Histogram

Core Image の CIFilter に新たに追加された CIAreaHistogram と CIHistogramDisplayFilter を使用して画像のヒストグラムを計算、表示するサンプル。


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


##Code Generator

2次元コード（AztecCode）と 128規格のバーコードを生成するサンプル。Core Image の CIFilter に新たに追加された CIAztecCodeGenerator と CICode128BarcodeGenerator を使用。


<img src="https://raw.githubusercontent.com/shu223/iOS8-Sampler/master/ResourcesForREADME/codegen.jpg" height="355">


##New Fonts

iOS 8 で追加された 7 種類のフォントのサンプル。

- AppleSDGothicNeo-UltraLight
- KohinoorDevanagari-Light
- KohinoorDevanagari-Medium
- KohinoorDevanagari-Book
- DamascusLight
- LaoSangamMN
- KhmerSangamMN


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


ちなみに iOS 7 で追加されたフォント 37 種類のリストはこちら：

- [iOS 7 で使えるフォント名一覧](http://d.hatena.ne.jp/shu223/20131017/1381992664)


##Popover

UIPopoverPresentationController のサンプル。


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


##Table Row Action

UITableViewRowAction のサンプル。UITableViewのセルをスワイプして出るメニューのふるまいや見た目をカスタマイズできます。（見た目が地味なのでスクショは省略しました。）


##Accordion Fold Transition

CIFilter の CIAccordionFoldTransition を用いたアコーディオンのように折り畳まれるような遷移エフェクト・・・のはずなのですが現状そのように動作していません。<span class="deco" style="color:#FF0000;">GitHub や Google で検索してもまったく先行例がない</span>ので、どなたか成功した方、プルリクお待ちしております。。


##おわりに

新機能の実装記事もこれからどんどん書いていきます！


以下これまでに書いたもの。

- [開発者向け公開情報から見る iOS 8 の細かい新機能8つ](http://d.hatena.ne.jp/shu223/20140605/1401927354)
- [いますぐ試せる HealthKit & HomeKit](http://d.hatena.ne.jp/shu223/20140622/1403475268)
- [CIKernel を使ったカスタムフィルタのつくりかた](http://d.hatena.ne.jp/shu223/20140623/1403478080)
- [App Extension の実装方法 その２：Custom Keyboard](http://d.hatena.ne.jp/shu223/20140708/1404758864)
- [App Extension の実装方法 その１：Action](http://d.hatena.ne.jp/shu223/20140606/1402015233)