Nous parlerons de 3D Touch. Fonctionnalité empruntée à l'Apple Watch et rebaptisée lors de l'introduction de l'iPhone 6s. Jérome Morissard et Victor Carmouze nous présentera en détail le bénéfice apporté par ces nouveaux usages et comment fonctionnent ces nouvelles APIs.
1. 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
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
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
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