7 rue de Bucarest 75008 Paris - +33 1 73 00 28 00 - backelite.com7 rue de Bucarest 75008 Paris - +33 1 73 00 28 00 - backelite.com
Jérôme Morissard
Victor Carmouze
Cocoaheads - 3D Touch
12 novembre 2015
Cocoaheads – Paris - 3D Touch 2
3D Touch
Cocoaheads – Paris - 3D Touch
- Quick Actions
- Peek and Pop
- Pressure Sensitivity
3
3D Touch
Cocoaheads – Paris - 3D Touch
- Pression sur l'icône de l'application
- Raccourcis statiques et dynamiques
- 4 maximum
3D Touch > Quick Actions
4
Cocoaheads – Paris - 3D Touch
Quick Actions
5
Cocoaheads – Paris - 3D Touch
- Configuration du info.plist
Quick Actions > Statique
6
https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html
UIApplicationShortcutItemType
la référence unique qu’aura l’action
(ex: com.jmo.add.to.favorite)
UIApplicationShortcutItemTitle
le titre de l’action
UIApplicationShortcutItemSubtitle
le sous titre de l’action
UIApplicationShortcutItemIconType
une valeur de l’énumération UIApplicationShortcutIconType, pour utiliser
une image système
UIApplicationShortcutItemIconFile
une image que l’on souhaite utiliser
(35x35, 1 couleur)
UIApplicationShortcutItemUserInfo
un dictionnaire pour des informations complémentaires.
Cocoaheads – Paris - 3D Touch
- Raccourcis statiques > configuration du info.plist
Quick Actions > Statique
7
Cocoaheads – Paris - 3D Touch
- La création de raccourcis dynamiques
@interface UIApplicationShortcutItem
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:
(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;
@end
Quick Actions > Dynamique
8
Cocoaheads – Paris - 3D Touch
- La création de raccourcis dynamiques
@interface UIApplicationShortcutItem
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:
(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;
@end
- L’association des raccourcis à l’icône de l’application
[UIApplication sharedApplication].shortcutItems = @[myAwesomeShortcutItem];
Quick Actions > Dynamique
9
Cocoaheads – Paris - 3D Touch
- Répondre au lancement via un shortcutItem
@protocol UIApplicationDelegate<NSObject>
@optional
…
…
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:
(void(^)(BOOL succeeded))completionHandler;
@end
Quick Actions > Statiques/Dynamiques
10
Cocoaheads – Paris - 3D Touch
• Tester sans avoir d’iPhone 6S
https://github.com/DeskConnect/SBShortcutMenuSimulator, cela permet de simuler la pression de type
3D Touch sur l’icône d’une application.
Quick Actions > Tips !
11
Cocoaheads – Paris - 3D Touch
• Tester sans avoir d’iPhone 6S
https://github.com/DeskConnect/SBShortcutMenuSimulator, cela permet de simuler la pression de type
3D Touch sur l’icône d’une application.
• Internationaliser vos QuickActions
En utilisant l’InfoPlist.strings, UIApplicationShortcutItemTitle contiendra la clé de traduction.
Quick Actions > Tips !
12
Cocoaheads – Paris - 3D Touch
• Attention au lancement de l’application via un raccourci
cas 1 : L’application est déjà lancée.
On clique sur l’action > delegate - (void)application:(UIApplication *)application performActionForShortcutItem:
(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler
cas 2 : L’application n’est pas lancée.
On clique sur l’action > delegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions il convient de vérifier les informations du dictionnaire
(UIApplicationLaunchOptionsShortcutItemKey) pour traiter directement l’action.
Quick Actions > Tips !
13
Cocoaheads – Paris - 3D Touch
• Attention à vos choix d’icônes système
Apple rajoute des icônes dans les versions d’OS.
typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) {
UIApplicationShortcutIconTypeCompose,
UIApplicationShortcutIconTypePlay,
UIApplicationShortcutIconTypePause,
UIApplicationShortcutIconTypeAdd,
UIApplicationShortcutIconTypeLocation,
UIApplicationShortcutIconTypeSearch,
UIApplicationShortcutIconTypeShare,
UIApplicationShortcutIconTypeProhibit NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeContact NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeHome NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeMarkLocation NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeFavorite NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeLove NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeCloud NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeInvitation NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeConfirmation NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeMail NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeMessage NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeDate NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeTime NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeCapturePhoto NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeCaptureVideo NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeTask NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeTaskCompleted NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeAlarm NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeBookmark NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeShuffle NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeAudio NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeUpdate NS_ENUM_AVAILABLE_IOS(9_1)
} NS_ENUM_AVAILABLE_IOS(9_0);
Quick Actions > Tips !
14
Cocoaheads – Paris - 3D Touch
Peek and Pop
15
Cocoaheads – Paris - 3D Touch
• Peek
• Pop
• Peek quick actions
Peek and Pop
16
Cocoaheads – Paris - 3D Touch
- (UIViewController *)previewingContext: viewControllerForLocation:
- (void)previewingContext:commitViewController:
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
Peek and Pop : API
17
Cocoaheads – Paris - 3D Touch
• En développement
• Features manquantes
• Non testable sur simulateur
Peek and Pop : API
18
Cocoaheads – Paris - 3D Touch
@interface UIViewController (UIViewControllerPreviewingRegistration)
- (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:
(id<UIViewControllerPreviewingDelegate>)delegate sourceView:(UIView *)sourceView;
- (void)unregisterForPreviewingWithContext:(id <UIViewControllerPreviewing>)previewing;
@end
Peek and Pop : Préliminaires
19
@interface UITraitCollection : NSObject <NSCopying, NSSecureCoding>
@property (nonatomic, readonly) UIForceTouchCapability forceTouchCapability
•3D Touch supporté et activé par l’appareil
•Enregistrement de l’objet qui gère le « Peek »
Cocoaheads – Paris - 3D Touch
- (nullable UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location;
- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit;
Peek and Pop : delegate
20
@protocol UIViewControllerPreviewingDelegate <NSObject>
Peek
Pop
Cocoaheads – Paris - 3D Touch
•Toujours avoir un Pop
•Configurer le sourceRect du previewingContext.
Peek and Pop : Points d’attention
21
Cocoaheads – Paris - 3D Touch
• Définis dans le viewController présenté
• Possibilité de le regrouper
• Blocks
Peek Quick Actions
22
Cocoaheads – Paris - 3D Touch
@interface UIViewController ()
- (NSArray <id <UIPreviewActionItem>> *)previewActionItems;
@end
@protocol UIPreviewActionItem;;
• UIPreviewAction
• UIPreviewActionGroup
Design Factory
+ (instancetype)actionWithTitle:(NSString *)title style:(UIPreviewActionStyle)style handler:
(void (^)(UIPreviewAction *action, UIViewController *previewViewController))handler;
Peek Quick Actions
23
Cocoaheads – Paris - 3D Touch
• WKWebView et UIWebview
• allowsLinkPreview = YES
Peek and Pop : Webview
24
Cocoaheads – Paris - 3D Touch
• Aucun code
• Autorisation de ViewControllers custom
• Xcode 7.1
Peek and Pop : Storyboards
25
Cocoaheads – Paris - 3D Touch
Pressure Sensitivity
26
Cocoaheads – Paris - 3D Touch
UITouch
@property(nonatomic,readonly) CGFloat force;
@property(nonatomic,readonly) CGFloat maximumPossibleForce;
Pressure Sensitivity
27
Cocoaheads – Paris - 3D Touch
Pressure Sensitivity
28
• Utilisée pour le dessin
Cocoaheads – Paris - 3D Touch
• Mise en place peu coûteuse
• Amélioration de l'interactivité des apps
• API en développement
• Pas testable sur simulateur
• iOS 9 et iPhone 6S (Plus)
Conclusion
29
Cocoaheads – Paris - 3D Touch
Documentation techniques
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/
uid/TP40016543-CH1-SW1
Guidelines graphiques
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/3DTouch.html#//apple_ref/doc/uid/
TP40006556-CH71
Tutoriels
Quick Actions http://www.stringcode.co.uk/add-ios-9s-quick-actions-shortcut-support-in-15-minutes-right-now/
Peek and Pop http://pinkstone.co.uk/how-to-use-3d-touch-in-ios-9-part-1-peek-and-pop/
http://krakendev.io/peek-pop/
3D Touch http://engineering.instagram.com/posts/465414923641286/lessons-learned-with-3D-touch
3D Touch
30
Cocoaheads – Paris - 3D Touch
Questions ?
31

3D Touch

  • 1.
    7 rue deBucarest 75008 Paris - +33 1 73 00 28 00 - backelite.com7 rue de Bucarest 75008 Paris - +33 1 73 00 28 00 - backelite.com Jérôme Morissard Victor Carmouze Cocoaheads - 3D Touch 12 novembre 2015
  • 2.
    Cocoaheads – Paris- 3D Touch 2 3D Touch
  • 3.
    Cocoaheads – Paris- 3D Touch - Quick Actions - Peek and Pop - Pressure Sensitivity 3 3D Touch
  • 4.
    Cocoaheads – Paris- 3D Touch - Pression sur l'icône de l'application - Raccourcis statiques et dynamiques - 4 maximum 3D Touch > Quick Actions 4
  • 5.
    Cocoaheads – Paris- 3D Touch Quick Actions 5
  • 6.
    Cocoaheads – Paris- 3D Touch - Configuration du info.plist Quick Actions > Statique 6 https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html UIApplicationShortcutItemType la référence unique qu’aura l’action (ex: com.jmo.add.to.favorite) UIApplicationShortcutItemTitle le titre de l’action UIApplicationShortcutItemSubtitle le sous titre de l’action UIApplicationShortcutItemIconType une valeur de l’énumération UIApplicationShortcutIconType, pour utiliser une image système UIApplicationShortcutItemIconFile une image que l’on souhaite utiliser (35x35, 1 couleur) UIApplicationShortcutItemUserInfo un dictionnaire pour des informations complémentaires.
  • 7.
    Cocoaheads – Paris- 3D Touch - Raccourcis statiques > configuration du info.plist Quick Actions > Statique 7
  • 8.
    Cocoaheads – Paris- 3D Touch - La création de raccourcis dynamiques @interface UIApplicationShortcutItem - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon: (nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER; - (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle; @end Quick Actions > Dynamique 8
  • 9.
    Cocoaheads – Paris- 3D Touch - La création de raccourcis dynamiques @interface UIApplicationShortcutItem - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon: (nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER; - (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle; @end - L’association des raccourcis à l’icône de l’application [UIApplication sharedApplication].shortcutItems = @[myAwesomeShortcutItem]; Quick Actions > Dynamique 9
  • 10.
    Cocoaheads – Paris- 3D Touch - Répondre au lancement via un shortcutItem @protocol UIApplicationDelegate<NSObject> @optional … … -(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler: (void(^)(BOOL succeeded))completionHandler; @end Quick Actions > Statiques/Dynamiques 10
  • 11.
    Cocoaheads – Paris- 3D Touch • Tester sans avoir d’iPhone 6S https://github.com/DeskConnect/SBShortcutMenuSimulator, cela permet de simuler la pression de type 3D Touch sur l’icône d’une application. Quick Actions > Tips ! 11
  • 12.
    Cocoaheads – Paris- 3D Touch • Tester sans avoir d’iPhone 6S https://github.com/DeskConnect/SBShortcutMenuSimulator, cela permet de simuler la pression de type 3D Touch sur l’icône d’une application. • Internationaliser vos QuickActions En utilisant l’InfoPlist.strings, UIApplicationShortcutItemTitle contiendra la clé de traduction. Quick Actions > Tips ! 12
  • 13.
    Cocoaheads – Paris- 3D Touch • Attention au lancement de l’application via un raccourci cas 1 : L’application est déjà lancée. On clique sur l’action > delegate - (void)application:(UIApplication *)application performActionForShortcutItem: (UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler cas 2 : L’application n’est pas lancée. On clique sur l’action > delegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions il convient de vérifier les informations du dictionnaire (UIApplicationLaunchOptionsShortcutItemKey) pour traiter directement l’action. Quick Actions > Tips ! 13
  • 14.
    Cocoaheads – Paris- 3D Touch • Attention à vos choix d’icônes système Apple rajoute des icônes dans les versions d’OS. typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) { UIApplicationShortcutIconTypeCompose, UIApplicationShortcutIconTypePlay, UIApplicationShortcutIconTypePause, UIApplicationShortcutIconTypeAdd, UIApplicationShortcutIconTypeLocation, UIApplicationShortcutIconTypeSearch, UIApplicationShortcutIconTypeShare, UIApplicationShortcutIconTypeProhibit NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeContact NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeHome NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMarkLocation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeFavorite NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeLove NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCloud NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeInvitation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeConfirmation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMail NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMessage NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeDate NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTime NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCapturePhoto NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCaptureVideo NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTask NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTaskCompleted NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeAlarm NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeBookmark NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeShuffle NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeAudio NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeUpdate NS_ENUM_AVAILABLE_IOS(9_1) } NS_ENUM_AVAILABLE_IOS(9_0); Quick Actions > Tips ! 14
  • 15.
    Cocoaheads – Paris- 3D Touch Peek and Pop 15
  • 16.
    Cocoaheads – Paris- 3D Touch • Peek • Pop • Peek quick actions Peek and Pop 16
  • 17.
    Cocoaheads – Paris- 3D Touch - (UIViewController *)previewingContext: viewControllerForLocation: - (void)previewingContext:commitViewController: - (NSArray<id<UIPreviewActionItem>> *)previewActionItems Peek and Pop : API 17
  • 18.
    Cocoaheads – Paris- 3D Touch • En développement • Features manquantes • Non testable sur simulateur Peek and Pop : API 18
  • 19.
    Cocoaheads – Paris- 3D Touch @interface UIViewController (UIViewControllerPreviewingRegistration) - (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate: (id<UIViewControllerPreviewingDelegate>)delegate sourceView:(UIView *)sourceView; - (void)unregisterForPreviewingWithContext:(id <UIViewControllerPreviewing>)previewing; @end Peek and Pop : Préliminaires 19 @interface UITraitCollection : NSObject <NSCopying, NSSecureCoding> @property (nonatomic, readonly) UIForceTouchCapability forceTouchCapability •3D Touch supporté et activé par l’appareil •Enregistrement de l’objet qui gère le « Peek »
  • 20.
    Cocoaheads – Paris- 3D Touch - (nullable UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location; - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit; Peek and Pop : delegate 20 @protocol UIViewControllerPreviewingDelegate <NSObject> Peek Pop
  • 21.
    Cocoaheads – Paris- 3D Touch •Toujours avoir un Pop •Configurer le sourceRect du previewingContext. Peek and Pop : Points d’attention 21
  • 22.
    Cocoaheads – Paris- 3D Touch • Définis dans le viewController présenté • Possibilité de le regrouper • Blocks Peek Quick Actions 22
  • 23.
    Cocoaheads – Paris- 3D Touch @interface UIViewController () - (NSArray <id <UIPreviewActionItem>> *)previewActionItems; @end @protocol UIPreviewActionItem;; • UIPreviewAction • UIPreviewActionGroup Design Factory + (instancetype)actionWithTitle:(NSString *)title style:(UIPreviewActionStyle)style handler: (void (^)(UIPreviewAction *action, UIViewController *previewViewController))handler; Peek Quick Actions 23
  • 24.
    Cocoaheads – Paris- 3D Touch • WKWebView et UIWebview • allowsLinkPreview = YES Peek and Pop : Webview 24
  • 25.
    Cocoaheads – Paris- 3D Touch • Aucun code • Autorisation de ViewControllers custom • Xcode 7.1 Peek and Pop : Storyboards 25
  • 26.
    Cocoaheads – Paris- 3D Touch Pressure Sensitivity 26
  • 27.
    Cocoaheads – Paris- 3D Touch UITouch @property(nonatomic,readonly) CGFloat force; @property(nonatomic,readonly) CGFloat maximumPossibleForce; Pressure Sensitivity 27
  • 28.
    Cocoaheads – Paris- 3D Touch Pressure Sensitivity 28 • Utilisée pour le dessin
  • 29.
    Cocoaheads – Paris- 3D Touch • Mise en place peu coûteuse • Amélioration de l'interactivité des apps • API en développement • Pas testable sur simulateur • iOS 9 et iPhone 6S (Plus) Conclusion 29
  • 30.
    Cocoaheads – Paris- 3D Touch Documentation techniques https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/ uid/TP40016543-CH1-SW1 Guidelines graphiques https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/3DTouch.html#//apple_ref/doc/uid/ TP40006556-CH71 Tutoriels Quick Actions http://www.stringcode.co.uk/add-ios-9s-quick-actions-shortcut-support-in-15-minutes-right-now/ Peek and Pop http://pinkstone.co.uk/how-to-use-3d-touch-in-ios-9-part-1-peek-and-pop/ http://krakendev.io/peek-pop/ 3D Touch http://engineering.instagram.com/posts/465414923641286/lessons-learned-with-3D-touch 3D Touch 30
  • 31.
    Cocoaheads – Paris- 3D Touch Questions ? 31