3. Pour le développeur
• État de départ / état d’arrivée
• Interpolation automatique:
«Générateur d’états intermédiaires»
courbes-fonction du temps
• Niveau UIView / Niveau CALayer
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
10. Animations
niveau CALayer
• Toute UIView a une layer non nulle
• Cette layer est un CALayer
• UIView est une couche d’abstraction au-
dessus de CALayer
ex: myView.alpha = 0.0; <~> myView.layer.opacity = 0.0;
• Sublayers
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
14. Les animations
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
anim.duration = 0.5;
anim.fromValue = [NSNumber numberWithFloat:1.0];
anim.toValue = [NSNumber numberWithFloat:0.1];
[myLayer addAnimation:theAnimation forKey:@"animateOpacity"];
[myLayer setOpacity:[NSNumber numberWithFLoat:0.1]];
• Que fais CoreAnimation?
• Création de toutes les frames, par interpolation
• addAnimation joue l’animation, frame par frame
ce sont les presentationLayer
• En fin d’animation, la layer prendra la valeur
spécifiée après l’ajout de l’animation
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
15. Les animations
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
anim.duration = 0.5;
anim.fromValue = [NSNumber numberWithFloat:1.0];
anim.toValue = [NSNumber numberWithFloat:0.1];
[myLayer addAnimation:theAnimation forKey:@"animateOpacity"];
[myLayer setOpacity:[NSNumber numberWithFLoat:0.1]];
Exemple sur une animation linéaire
État État
presentationLayers
initial final
0.5s
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
16. Transactions
• Implicites vs explicites
• Les transactions explicites permettent
• d’overrider les propriétés des animations
• de spécifier un bloc de completion
[CATransaction begin];
[CATransaction setAnimationDuration:0.3];
[CATransaction setCompletionBlock:^{
[self doSomething];
}];
// Add animation to layer
[CATransaction commit];
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
17. Animer des
propriétés custom
• CoreAnimation peut animer des propriétés qui
ne font pas partie des animatable properties
• Du moment qu’elles représentent des nombres
(types primitifs ou NSNumbers)
• A charge au développeur de dire à quoi
correspondent ces propriétés
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
18. Animer des
propriétés custom
• Hériter de CALayer
• 3 méthodes indispensables à implémenter
- (id)initWithLayer:(id)layer;
+ (BOOL)needsDisplayForKey:(NSString*)key;
- (void)drawInContext:(CGContextRef)ctx;
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
19. Démo
c’est mieux qu’un long discours
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
20. Performances
• Très bonnes (GPU)
• Du moment que les layers restent opaques
layer.opaque = YES;
• Mais dans certains cas on ne peut faire autrement
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
21. Démo
(ça sent la fin)
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
22. One more thing
parce que moi aussi je le vaux bien !
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011
23. Des questions?
Merci
CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011