23
CoreAnimation pour les NULLs et les moins nuls Romain Vincens [email protected]

Core animation pour les nul ls et les moins nuls

Embed Size (px)

Citation preview

Page 1: Core animation pour les nul ls et les moins nuls

CoreAnimation pour les NULLs et les moins nuls

Romain [email protected]

Page 2: Core animation pour les nul ls et les moins nuls

CoreAnimationc’est quoi?

• QuartzCore.framework

• Visualisation de données

• Accélération GPU

• Threads séparés

• Développements simplifiés

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 3: Core animation pour les nul ls et les moins nuls

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

Page 4: Core animation pour les nul ls et les moins nuls

Courbes

Linéaire

EaseOut

EaseIn

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

EaseInOut

Page 5: Core animation pour les nul ls et les moins nuls

Animations niveau UIKit

• OS 2.0 et +

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

[UIView beginAnimations:nil context:nil];[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];[UIView setAnimationDuration:0.5];[UIView setAnimationDelegate:myView];[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];

[myView setAlpha:0.0];

[UIView commitAnimations];

Page 6: Core animation pour les nul ls et les moins nuls

Animations niveau UIKit

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [myView setAlpha:0.0]; } completion:^(BOOL finished) { [myView removeFromSuperview]; }];

• OS 4.0 et +

Page 7: Core animation pour les nul ls et les moins nuls

Enchainements

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

- (void) anim1 { [UIView beginAnimations:nil context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveLinear]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDelegate:self]; if(someConditions) { [UIView setAnimationDidStopSelector:@selector(anim2)]; } else { [UIView setAnimationDidStopSelector:@selector(anim3)]; } // Animations [UIView commitAnimations];}

• Syntaxe «classique»

Page 8: Core animation pour les nul ls et les moins nuls

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

- (void) anim1 { [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ // animate stuff } completion:^(BOOL finished) { [UIView animateWithDuration:0.5 animations:^{ // animate something else }]; }];}

Enchainements

• Syntaxe des blocs

Page 9: Core animation pour les nul ls et les moins nuls

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

• Passage de blocs en paramètres

- (void) someMethod { ... [self animateWithCompletionBlock:^{

[object1 removeFromSuperview]; }]; ...} - (void) animateWithCompletionBlock:(void (^)(void))block { [UIView animateWithDuration:0.5

delay:0.0 options:UIViewAnimationOptionCurveEaseInOut

animations:^{ // animate

} completion:^(BOOL finished) {

if(block != nil) { block(); } }];

}

Page 10: Core animation pour les nul ls et les moins nuls

Animationsniveau 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

Page 11: Core animation pour les nul ls et les moins nuls

Core AnimationVue d’ensemble

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 12: Core animation pour les nul ls et les moins nuls

Les animations• CAPropertyAnimation

• keypath : la propriété à animer

• CABasicAnimation

• fromValue, toValue, byValue

• CAKeyframeAnimation

• values/path

• keytimes, timingFunctions, calculationModes

• CAAnimationGroupCoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 13: Core animation pour les nul ls et les moins nuls

Animatable properties

anchorPoint

backgroundColor

backgroundFilters

borderColor

borderWidth

bounds

compositingFilter

contents

contentsRect

cornerRadius

doubleSided

filtersframe

hidden

mask

masksToBounds

opacity

position

shadowColor

shadowOffset shadowOpacity

shadowRadius

sublayers

sublayerTransform

transform

zPosition

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 14: Core animation pour les nul ls et les moins nuls

Les animations

• Que fais CoreAnimation?

• Création de toutes les frames, par interpolation

• addAnimation joue l’animation, frame par framece 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

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]];

Page 15: Core animation pour les nul ls et les moins nuls

Les animations

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

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

0.5s

Étatinitial

Étatfinal

presentationLayers

Page 16: Core animation pour les nul ls et les moins nuls

Transactions

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

• 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];

Page 17: Core animation pour les nul ls et les moins nuls

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

Page 18: Core animation pour les nul ls et les moins nuls

Animer des propriétés custom

• Hériter de CALayer

• 3 méthodes indispensables à implémenter

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

- (id)initWithLayer:(id)layer;+ (BOOL)needsDisplayForKey:(NSString*)key;- (void)drawInContext:(CGContextRef)ctx;

Page 19: Core animation pour les nul ls et les moins nuls

Démo

c’est mieux qu’un long discours

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 20: Core animation pour les nul ls et les moins nuls

Performances

• Très bonnes (GPU)

• Du moment que les layers restent opaques

• Mais dans certains cas on ne peut faire autrement

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

layer.opaque = YES;

Page 21: Core animation pour les nul ls et les moins nuls

Démo

(ça sent la fin)

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 22: Core animation pour les nul ls et les moins nuls

One more thing

parce que moi aussi je le vaux bien !

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011

Page 23: Core animation pour les nul ls et les moins nuls

Des questions?

Merci

CoreAnimation - Romain Vincens - Cocoaheads - 10 mars 2011