Lors du dernier Meetup Cocoaheads à Montpellier, qui a réunit une trentaine de développeurs iOS, Jérôme Morissard, Lead iOS Developer chez Backelite, a présenté les fonctionnalités et utilisations du 3D Touch lors d'une démonstration live.
6. QUICK ACTIONS
Pression sur l’icône de l’application
4 items maximum
Ces items peuvent être statiques ou dynamiques
Le but : aller plus vite et recentrer l’utilisateur !
6
7. QUICK ACTIONS > STATIQUES
info.plist
7
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
UIApplicationShortcutItemIconFile
une image que l’on souhaite utiliser
(35x35, 1 couleur)
UIApplicationShortcutItemUserInfo un dictionnaire pour des informations complémentaires.
8. QUICK ACTIONS > STATIQUES
info.plist
8
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
UIApplicationShortcutItemIconFile
une image que l’on souhaite utiliser
(35x35, 1 couleur)
UIApplicationShortcutItemUserInfo un dictionnaire pour des informations complémentaires.
https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html
15. QUICK ACTIONS > INTERCEPTION !
15
// Called when the user activates your application by selecting a shortcut on the home screen,
// except when -application:willFinishLaunchingWithOptions: or -
application:didFinishLaunchingWithOptions returns NO.
- (void)application:(UIApplication *)application
performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
completionHandler:(void(^)(BOOL succeeded))completionHandler;
16. QUICK ACTIONS > INTERCEPTION !
16
// Called when the user activates your application by selecting a shortcut on the home screen,
// except when -application:willFinishLaunchingWithOptions: or -
application:didFinishLaunchingWithOptions returns NO.
- (void)application:(UIApplication *)application
performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
completionHandler:(void(^)(BOOL succeeded))completionHandler;
- (BOOL)application:(UIApplication *)application
willFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions;
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions;
UIKIT_EXTERN NSString *const UIApplicationLaunchOptionsShortcutItemKey
17. QUICK ACTIONS > ASTUCES > 1
• Pas de simulateur, il faut un iPhone 6S ou 6S
• https://github.com/DeskConnect/SBShortcutMenuSimulator pour
permettre de simuler les QuickActions.
17
18. QUICK ACTIONS > ASTUCES > 2
• Internationalisation !
• En utilisant l’InfoPlist.strings, UIApplicationShortcutItemTitle
contiendra la clé de traduction.
18
26. PEEK
AND
POP
:
API
Une catégorie sur UIViewController
(UIViewControllerPreviewingRegistration)
Deux protocoles UIViewControllerPreviewingDelegate,
UIViewControllerPreviewing
26
27. PEEK
AND
POP
:
API
>
PREVIEWINGREGISTRATION
La catégorie sur UIViewController
(UIViewControllerPreviewingRegistration)
On enregistre/désabonne notre ViewController pour gérer la
prévisualisation.
27
@interface
UIViewController
(UIViewControllerPreviewingRegistration)
//
Registers
a
view
controller
to
participate
with
3D
Touch
preview
(peek)
and
commit
(pop).
-‐
(id
<UIViewControllerPreviewing>)registerForPreviewingWithDelegate:
(id<UIViewControllerPreviewingDelegate>)delegate
sourceView:(UIView
*)sourceView
NS_AVAILABLE_IOS(9_0);
-‐
(void)unregisterForPreviewingWithContext:(id
<UIViewControllerPreviewing>)previewing
NS_AVAILABLE_IOS(9_0);
@end
28. PEEK
AND
POP
:
API
>
PREVISUALISER
Le protocole UIViewControllerPreviewing est un protocole informatif,
28
@protocol
UIViewControllerPreviewing
<NSObject>
//
This
gesture
can
be
used
to
cause
the
previewing
presentation
to
wait
until
one
of
your
gestures
fails
or
to
allow
simultaneous
recognition
during
the
initial
phase
of
the
preview
presentation.
@property
(nonatomic,
readonly)
UIGestureRecognizer
*previewingGestureRecognizerForFailureRelationship
NS_AVAILABLE_IOS(9_0);
@property
(nonatomic,
readonly)
id<UIViewControllerPreviewingDelegate>
delegate
NS_AVAILABLE_IOS(9_0);
@property
(nonatomic,
readonly)
UIView
*sourceView
NS_AVAILABLE_IOS(9_0);
//
This
rect
will
be
set
to
the
bounds
of
sourceView
before
each
call
to
//
-‐previewingContext:viewControllerForLocation:
@property
(nonatomic)
CGRect
sourceRect
NS_AVAILABLE_IOS(9_0);
@end
29. PEEK
AND
POP
:
API
>
PREVISUALISER
Le protocole UIViewControllerPreviewing est un protocole informatif,
29
@protocol
UIViewControllerPreviewing
<NSObject>
//
This
gesture
can
be
used
to
cause
the
previewing
presentation
to
wait
until
one
of
your
gestures
fails
or
to
allow
simultaneous
recognition
during
the
initial
phase
of
the
preview
presentation.
@property
(nonatomic,
readonly)
UIGestureRecognizer
*previewingGestureRecognizerForFailureRelationship
NS_AVAILABLE_IOS(9_0);
@property
(nonatomic,
readonly)
id<UIViewControllerPreviewingDelegate>
delegate
NS_AVAILABLE_IOS(9_0);
@property
(nonatomic,
readonly)
UIView
*sourceView
NS_AVAILABLE_IOS(9_0);
//
This
rect
will
be
set
to
the
bounds
of
sourceView
before
each
call
to
//
-‐previewingContext:viewControllerForLocation:
@property
(nonatomic)
CGRect
sourceRect
NS_AVAILABLE_IOS(9_0);
@end
30. PEEK
AND
POP
:
API
>
PREVISUALISER
L’implémentation du protocole UIViewControllerPreviewingDelegate
Le système nous délègue :
La construction du contrôleur pour visualiser le détail (le retour du protocole),
Trouver la zone à mettre en avant (mise à jour du previewingContext.sourceRect)
30
NS_CLASS_AVAILABLE_IOS(9_0)
@protocol
UIViewControllerPreviewingDelegate
<NSObject>
//
If
you
return
nil,
a
preview
presentation
will
not
be
performed
-‐
(nullable
UIViewController
*)previewingContext:(id
<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location
NS_AVAILABLE_IOS(9_0);
@end
31. PEEK
AND
POP
:
API
>
«
POPER
»
L’implémentation du protocole UIViewControllerPreviewingDelegate.
Le système nous délègue la finalisation la transaction.
On peut :
ne rien faire,
pousser le même contrôleur,
pousser un autre contrôleur,
faire une autre action.
31
NS_CLASS_AVAILABLE_IOS(9_0)
@protocol
UIViewControllerPreviewingDelegate
<NSObject>
-‐
(void)previewingContext:(id
<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController
*)viewControllerToCommit
NS_AVAILABLE_IOS(9_0);
@end
32. PEEK
AND
POP
:
API
>
«
POPER
»
L’implémentation du protocole UIViewControllerPreviewingDelegate.
Le système nous délègue la finalisation la transaction.
On peut :
ne rien faire,
pousser le même contrôleur,
pousser un autre contrôleur,
faire une autre action.
32
NS_CLASS_AVAILABLE_IOS(9_0)
@protocol
UIViewControllerPreviewingDelegate
<NSObject>
-‐
(void)previewingContext:(id
<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController
*)viewControllerToCommit
NS_AVAILABLE_IOS(9_0);
@end
33. PEEK
AND
POP
:
API
>
POUR
FAIRE
SIMPLE
!
33
NS_CLASS_AVAILABLE_IOS(9_0)
@protocol
UIViewControllerPreviewingDelegate
<NSObject>
//
If
you
return
nil,
a
preview
presentation
will
not
be
performed
-‐
(nullable
UIViewController
*)previewingContext:(id
<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location
NS_AVAILABLE_IOS(9_0);
-‐
(void)previewingContext:(id
<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController
*)viewControllerToCommit
NS_AVAILABLE_IOS(9_0);
@end
Peek
Pop
34. PEEK
AND
POP
:
API
>
PEEK
QUICK
ACTIONS
Le contrôleur « peeké » peut exposer des actions en
faisant un geste vers le haut.
Les actions peuvent être regroupées sous forme de
blocs.
34