狠狠撸
Submit Search
3D touch for iOS
?
6 likes
?
5,725 views
T
toyship
Follow
3D touch for iOS
Read less
Read more
1 of 30
Download now
Downloaded 21 times
More Related Content
3D touch for iOS
1.
3D#touch#for#iOS 2015/09/16 @TachibanaKaoru
2.
自己紹介 渋谷のVOYAGE'GROUPでiOSエンジニア をしています。 Twi$er/Vainglory/:/@TachibanaKaoru Blog/:/h$p://www.toyship.org/
3.
注意 今日の資料はAppleが一般に公開した資料をもとにしています。 なお、この資料の内容サンプルコードや発表資料から類推したも のであり、シミュレーターや実機での動作確認を行っていませ ん。 間違いを含む可能性があります。(実機入手後確認予定。)
4.
What%is%3D%touch? Speci?ca(on iOS9で導入された感圧機能を使った新しい機能 対応端末はiPhone6S/iPhone6S,plus 一部の機能は9.1からとなりますが、9.0からすでに実装できる機 能がほとんどです。
5.
Pressure&Sensi*vity タッチの圧力を判定してアプリの機能を 拡張できます。 例えばスケッチアプリであれば、圧力に 応じて線を太くしたり、色を濃くしたり する実装をすることもできます。 圧力の感知だけでなく、今タッチしてい るものがスタイラスか指かの判定も可能 です。
6.
Quick&Ac(ons ホーム画面のアプリアイコンを押すこと で、メニューを表示することができるよ うになりました。
7.
Peek$and$Pop 次の画面を出すような画面で、画面遷移 をする前に、次の画面をちらっと見るこ とができる機能。 表示されたチラ見画面にメニューをつけ たりすることもできます。
8.
3D#Touch#の動作確認 なお、現時点では3D#touch関連の機能の動作確認はシミュレー ターではできません。 実際の動作は、対応端末が発売されるまで待ちましょう。
9.
Pressure&Sensi*vity Implementa)on
10.
Pressure&Sensi*vity 基本的には、UITouchクラスに追加されているforce(CGFLoat) 値を使ってアプリの機能に応じて実装します。 また、UITouchのtype(UITouchType)から、touch処理がどこか ら行われているかの情報が取得できます。 enum UITouchType :
Int { case Direct case Indirect case Stylus }
11.
Pressure&Sensi*vity 9.1ではさらにUITouchクラスに下記の要 素などが追加される予定。 +,al/tudeAngle:,CGFloat,{,get,} +,azimuthAngleInView(_,view:,UIView?),+>, CGFloat スタイラスの圧力だけではなく、入力角 度なども取得できるようになりそうで す。
12.
Quick&Ac(ons Implementa)on
13.
Quick&Ac(ons 設定方法は下記の2種類あります。 !"sta&c"quick"ac&ons "!"必ず表示される固定メニュー。 "!"アプリのino.plistで定義 !"dynamic"quick"ac&ons "!"ユーザーの状況などによって内容が変更できるメニュー。 "!"コードで設定
14.
Quick&Ac(ons メニューの表示順 表示数には上限数があり、info.plistに設定された*sta,c*ac,onsが まず表示されます。 (上限数は現時点では明記されていない) sta,c*ac,onsを表示した後に表示数に余裕がある場合には、 dynamic*ac,onsも表示されます。 アプリの初回起動時前には、sta,c*ac,onsしか表示されません。
15.
Quick&Ac(ons Implementa)on dynamic(ac)onsの場合には、 UIApplica)onShortcutItemオブジェクト を作成して、UIApplica)onに登録します 7(localizedTitle 7(localizedSub)tle 7(type 7(icon 7(userInfo
16.
Quick&Ac(ons アイコンについて UIApplica)onShortcutItem3に設定できる アイコンはUIApplica)onShortcutIconと なっており、システムで用意されたアイ コン、自分で用意するアイコン、連絡先 アイコンのうちから選択可能です。 (自分で用意する場合は35x35pointで、 単色のみ使用可能)
17.
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] } ... }
18.
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>
19.
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: } }
20.
Peek$and$Pop Implementa)on
21.
Peek$and$Pop Peek$and$Popの流れ (1)特定のエリアを軽く押す(Peek) (2)Peek画面が表示される(押すのをやめると元の画面に戻る) (3)さらに強く押す(Pop)とPeek画面が大きくなり、目的のview画面 となる
23.
Peek$and$Pop Master'Detail形式のプロジェクトで実装する場合の標準的な流れ (1)$3Dtouchが使えるか確認し、どのviewがpeekの対象になるかを 設定。同時にpeek処理のdelegateを設定。 (2)$ユーザーがPeekジェスチャーに対して、peekの表示対象となる viewControllerの作成と、表示されるサイズ(高さのみ)を指定。 (3)$ユーザーがPopジェスチャーに対して、peekで作成された viewControllerの通常表示処理を行う。
24.
Peek$and$Pop 実装例!(1)!peekのviewを指定して、delegateを設定。 // MasterViewController override func
viewDidLoad() { super.viewDidLoad() if traitCollection.forceTouchCapability == .Available { registerForPreviewingWithDelegate(self, sourceView: myview) } }
25.
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 }
26.
Peek$and$Pop 実装例!(3)!Popジェスチャーの実装 // MasterViewController func previewingContext(previewingContext:
UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) { //表示用のviewControllerはpeekの時に生成されているので、それを再利用する showViewController(viewControllerToCommit, sender: self) }
27.
Peek$and$Pop Peek時にAc&onMenuを追加することもで きます。
28.
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] }
29.
Peek$and$Pop Implementa)on UIWebViewやMKWebViewでは、リンク 先をPeekする機能がすでに実装されてい ますが、デフォルトではo?になっていま す。 allowsLinkPreviewをtrueにすると使 えるようになります。
30.
まとめ ? 3D$touch機能は、まだ実機やシミュレーターでの動作確認はで きませんが、実装は可能です。 ? 実装自体はそれほど難しくはないので、是非試してみることを お勧めします。
Download