SlideShare a Scribd company logo
3D#touch#for#iOS
2015/09/16
@TachibanaKaoru
自己紹介
渋谷のVOYAGE'GROUPでiOSエンジニア
をしています。
Twi$er/Vainglory/:/@TachibanaKaoru
Blog/:/h$p://www.toyship.org/
注意
今日の資料はAppleが一般に公開した資料をもとにしています。
なお、この資料の内容サンプルコードや発表資料から類推したも
のであり、シミュレーターや実機での動作確認を行っていませ
ん。
間違いを含む可能性があります。(実機入手後確認予定。)
What%is%3D%touch?
Specifica(on
iOS9で導入された感圧機能を使った新しい機能
対応端末はiPhone6S/iPhone6S,plus
一部の機能は9.1からとなりますが、9.0からすでに実装できる機
能がほとんどです。
Pressure&Sensi*vity
タッチの圧力を判定してアプリの機能を
拡張できます。
例えばスケッチアプリであれば、圧力に
応じて線を太くしたり、色を濃くしたり
する実装をすることもできます。
圧力の感知だけでなく、今タッチしてい
るものがスタイラスか指かの判定も可能
です。
Quick&Ac(ons
ホーム画面のアプリアイコンを押すこと
で、メニューを表示することができるよ
うになりました。
Peek$and$Pop
次の画面を出すような画面で、画面遷移
をする前に、次の画面をちらっと見るこ
とができる機能。
表示されたチラ見画面にメニューをつけ
たりすることもできます。
3D#Touch#の動作確認
なお、現時点では3D#touch関連の機能の動作確認はシミュレー
ターではできません。
実際の動作は、対応端末が発売されるまで待ちましょう。
Pressure&Sensi*vity
Implementa)on
Pressure&Sensi*vity
基本的には、UITouchクラスに追加されているforce(CGFLoat)
値を使ってアプリの機能に応じて実装します。
また、UITouchのtype(UITouchType)から、touch処理がどこか
ら行われているかの情報が取得できます。
enum UITouchType : Int {
case Direct
case Indirect
case Stylus
}
Pressure&Sensi*vity
9.1ではさらにUITouchクラスに下記の要
素などが追加される予定。
+,al/tudeAngle:,CGFloat,{,get,}
+,azimuthAngleInView(_,view:,UIView?),+>,
CGFloat
スタイラスの圧力だけではなく、入力角
度なども取得できるようになりそうで
す。
Quick&Ac(ons
Implementa)on
Quick&Ac(ons
設定方法は下記の2種類あります。
!"sta&c"quick"ac&ons
"!"必ず表示される固定メニュー。
"!"アプリのino.plistで定義
!"dynamic"quick"ac&ons
"!"ユーザーの状況などによって内容が変更できるメニュー。
"!"コードで設定
Quick&Ac(ons
メニューの表示順
表示数には上限数があり、info.plistに設定された*sta,c*ac,onsが
まず表示されます。
(上限数は現時点では明記されていない)
sta,c*ac,onsを表示した後に表示数に余裕がある場合には、
dynamic*ac,onsも表示されます。
アプリの初回起動時前には、sta,c*ac,onsしか表示されません。
Quick&Ac(ons
Implementa)on
dynamic(ac)onsの場合には、
UIApplica)onShortcutItemオブジェクト
を作成して、UIApplica)onに登録します
7(localizedTitle
7(localizedSub)tle
7(type
7(icon
7(userInfo
Quick&Ac(ons
アイコンについて
UIApplica)onShortcutItem3に設定できる
アイコンはUIApplica)onShortcutIconと
なっており、システムで用意されたアイ
コン、自分で用意するアイコン、連絡先
アイコンのうちから選択可能です。
(自分で用意する場合は35x35pointで、
単色のみ使用可能)
Quick&Ac(ons
実装例!(add!dynamic!ac*ons)
func application(application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [NSObject: AnyObject]?) -> Bool {
if let shortcutItems = application.shortcutItems where shortcutItems.isEmpty {
let shortcutPlay = UIMutableApplicationShortcutItem(
type: "MyApp.MenuType001",
localizedTitle: "Play",
localizedSubtitle: "with this title",
icon: UIApplicationShortcutIcon(type: .Play),
userInfo: nil
)
application.shortcutItems = [shortcutPlay]
}
...
}
Quick&Ac(ons
実装例!(add!sta'c!ac'ons)
// info.plist
<key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeSearch</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>shortcutSubtitle1</string>
<key>UIApplicationShortcutItemTitle</key>
<string>shortcutTitle1</string>
<key>UIApplicationShortcutItemType</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).First</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>firstShorcutKey1</key>
<string>firstShortcutKeyValue1</string>
</dict>
</dict>
</array>
Quick&Ac(ons
実装例!(ac%onsがよばれた時)
// in AppDelegate
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: Bool -> Void) {
guard ShortcutIdentifier(fullType: shortcutItem.type) != nil else { return false }
guard let shortCutType = shortcutItem.type as String? else { return false }
switch (shortCutType) {
case "Menu1":
// Menu1の処理
case "Menu2":
// Menu2の処理
default:
}
}
Peek$and$Pop
Implementa)on
Peek$and$Pop
Peek$and$Popの流れ
(1)特定のエリアを軽く押す(Peek)
(2)Peek画面が表示される(押すのをやめると元の画面に戻る)
(3)さらに強く押す(Pop)とPeek画面が大きくなり、目的のview画面
となる
3D touch for iOS
Peek$and$Pop
Master'Detail形式のプロジェクトで実装する場合の標準的な流れ
(1)$3Dtouchが使えるか確認し、どのviewがpeekの対象になるかを
設定。同時にpeek処理のdelegateを設定。
(2)$ユーザーがPeekジェスチャーに対して、peekの表示対象となる
viewControllerの作成と、表示されるサイズ(高さのみ)を指定。
(3)$ユーザーがPopジェスチャーに対して、peekで作成された
viewControllerの通常表示処理を行う。
Peek$and$Pop
実装例!(1)!peekのviewを指定して、delegateを設定。
// MasterViewController
override func viewDidLoad() {
super.viewDidLoad()
if traitCollection.forceTouchCapability == .Available {
registerForPreviewingWithDelegate(self, sourceView: myview)
}
}
Peek$and$Pop
実装例!(2)!Peekジェスチャーの実装
// MasterViewController
func previewingContext(previewingContext: UIViewControllerPreviewing,
viewControllerForLocation location: CGPoint) -> UIViewController? {
let detailViewController = ...//表示したいviewControllerを生成する
//表示するPeek画面の高さを設定する
detailViewController.preferredContentSize = CGSize(width: 0.0, height: 50.0)
//Peek画面が出る前にBlurしない領域を設定する
previewingContext.sourceRect = myview.frame
return detailViewController
}
Peek$and$Pop
実装例!(3)!Popジェスチャーの実装
// MasterViewController
func previewingContext(previewingContext: UIViewControllerPreviewing,
commitViewController viewControllerToCommit: UIViewController) {
//表示用のviewControllerはpeekの時に生成されているので、それを再利用する
showViewController(viewControllerToCommit, sender: self)
}
Peek$and$Pop
Peek時にAc&onMenuを追加することもで
きます。
Peek$and$Pop
実装例!Ac$onMenuの追加
// DetailViewController
override func previewActionItems() -> [UIPreviewActionItem] {
let actionMail = UIPreviewAction(title: "Send mail",
style: .Default,
handler:{item,viewcon in
// send mail
})
let actionDelete = UIPreviewAction(title: "Delete mail",
style: .Destructive,
handler:{item,viewcon in
// delete mail
})
return [actionMail,actionDelete]
}
Peek$and$Pop
Implementa)on
UIWebViewやMKWebViewでは、リンク
先をPeekする機能がすでに実装されてい
ますが、デフォルトではoffになっていま
す。
allowsLinkPreviewをtrueにすると使
えるようになります。
まとめ
• 3D$touch機能は、まだ実機やシミュレーターでの動作確認はで
きませんが、実装は可能です。
• 実装自体はそれほど難しくはないので、是非試してみることを
お勧めします。

More Related Content

PDF
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
PDF
iOSアプリ UIテスト自動化入門
PDF
fastlane触ってみた
PDF
iOS 8 Widget ~ 導入から Tips まで
PDF
楽しいものづくり ファーストステップ
PPTX
iOSにおけるUIテスト@potetotips
PDF
福井スマートフォンハッカソン Titanium Mobileの紹介
PDF
ディープラーニングとAppiumでモバイルテスト自動化
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
iOSアプリ UIテスト自動化入門
fastlane触ってみた
iOS 8 Widget ~ 導入から Tips まで
楽しいものづくり ファーストステップ
iOSにおけるUIテスト@potetotips
福井スマートフォンハッカソン Titanium Mobileの紹介
ディープラーニングとAppiumでモバイルテスト自動化

What's hot (19)

PDF
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
PDF
アプリリリース後に後悔しないための20のこと
PPTX
Appium を使って iOS / Android の UI テストを共通化
PDF
もう怖くないモバイルアプリ開発!
PDF
Google Play Developer APIを使ってみた
PDF
Leap motion.js
PDF
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
PPTX
Unity(再)入門
PPTX
Watch kit解説と実際のtips
PPTX
プログラムで映像をつくるとは?? ~超入門編~
PDF
絵心なくても大丈夫。 Holoなホラーゲームの提案
PDF
はてなにおける Android アプリのソフトウェアテスト
PDF
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
PPTX
Visual Studio App Centerの始め方
PDF
Can we live in a pure Swift world?
PDF
AIR for Android で アプリ内課金
PPTX
Device Farm を使ったスマホアプリの自動テスト
PDF
最近の実装方針について
PDF
スマホキャンプサマー2012:ANEとアプリ内課金に挑戦
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
アプリリリース後に後悔しないための20のこと
Appium を使って iOS / Android の UI テストを共通化
もう怖くないモバイルアプリ開発!
Google Play Developer APIを使ってみた
Leap motion.js
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Unity(再)入門
Watch kit解説と実際のtips
プログラムで映像をつくるとは?? ~超入門編~
絵心なくても大丈夫。 Holoなホラーゲームの提案
はてなにおける Android アプリのソフトウェアテスト
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
Visual Studio App Centerの始め方
Can we live in a pure Swift world?
AIR for Android で アプリ内課金
Device Farm を使ったスマホアプリの自動テスト
最近の実装方針について
スマホキャンプサマー2012:ANEとアプリ内課金に挑戦
Ad

Viewers also liked (9)

PDF
Enumerate
PDF
UIKit Sound
PDF
Enhancements with 3D Touch
PDF
tvOSでWebSocketを使う
PDF
Framework code reading
PDF
TestFlightみたいなのを自作する
PDF
To learn Interpolator
PDF
What's new Swift3
PDF
MySQL 8.0で憶えておいてほしいこと
Enumerate
UIKit Sound
Enhancements with 3D Touch
tvOSでWebSocketを使う
Framework code reading
TestFlightみたいなのを自作する
To learn Interpolator
What's new Swift3
MySQL 8.0で憶えておいてほしいこと
Ad

Similar to 3D touch for iOS (9)

PDF
3 d touchについて
PDF
20150930 3D Touchを試す
KEY
UX on HTML5 x Touch UI
PDF
奥行きを意識したプロダクト-iOS9で変わる体験-
PDF
M1GP2015
PDF
スマホアプリの"手触り"や"美的センス"について~WebSig会議 vol.33:1stセッション
PDF
#FTMA15 第三回課題 鬼コースサーベイ
PPTX
もみもみセンサー
PDF
Corona HandsOn#3
3 d touchについて
20150930 3D Touchを試す
UX on HTML5 x Touch UI
奥行きを意識したプロダクト-iOS9で変わる体験-
M1GP2015
スマホアプリの"手触り"や"美的センス"について~WebSig会議 vol.33:1stセッション
#FTMA15 第三回課題 鬼コースサーベイ
もみもみセンサー
Corona HandsOn#3

More from toyship (13)

PDF
Time for Xcode Behavior
PDF
Notifications in iOS10
PDF
Universal Link
PDF
Swift Protocol and Selector
PDF
Xcode7時代のアプリ配布
PDF
My first tvOS
PDF
Contents blocker on iOS9
PDF
Embedded framework and so on
PDF
はじめてのWKInterfaceController
PDF
App extension for iOS
PDF
サーバーからiOSアプリを変更する
PDF
Xcode bot
PDF
AVSpeechSynthesizerとロケール
Time for Xcode Behavior
Notifications in iOS10
Universal Link
Swift Protocol and Selector
Xcode7時代のアプリ配布
My first tvOS
Contents blocker on iOS9
Embedded framework and so on
はじめてのWKInterfaceController
App extension for iOS
サーバーからiOSアプリを変更する
Xcode bot
AVSpeechSynthesizerとロケール

3D touch for iOS