Objective-C: gestire multiple animazioni con un solo setAnimationDidStopSelector

L’impostazione del selettore di fine animazione, eseguita con setAnimationDidStopSelector, su una classe UIView è estremamente versatile, come già visto in setAnimationDidStopSelector: usi diversi ed avanzati.
Lasciatemi ora che vi mostri una tecnica davvero comoda quando abbiamo animazioni multiple e/o vogliamo gestire delle code (queue) di animazioni.

La tecnica si basa sulla possibilità di impostare un nome, un’identificatico (animationID), alla nostra animazione. È possibile, infatti, scrivere:

1
2
3
[UIView beginAnimations:@"animazioneSfera" context:nil];
...
[UIView commitAnimations];

Questo identificativo può essere opportunamente inviato al selettore che verrà chiamato a fine animazione:

1
2
3
4
5
[UIView beginAnimations:@"animazioneSfera" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
...
[UIView commitAnimations];

Il messaggio animationDidStop avrà la seguente sintassi:

1
2
3
4
- (void)animationDidStop:(NSString *)animationID
     finished:(NSNumber *)finished context:(void *)context {
// Codice qui
}

Come vedete il primo parametro è l’animationID dell’animazione che ha terminato il suo ciclo. È quindi possibile realizzare una serie di if/else if su tale parametro, così da controllare in modo centralizzato il flusso delle animazioni:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*!
 @method     animationDidStop
 @abstract   Fine animazione
 @discussion Chiamata quando (le) un'animazione/i termina(no)
 */

- (void)animationDidStop:(NSString *)animationID
     finished:(NSNumber *)finished context:(void *)context {

    if ([animationID isEqualToString:@"animazioneSfera"]) {
        // TO DO
    } else if ([animationID isEqualToString:@"animazioneQuadrato"]) {
        // TO DO
    } else if ([animationID isEqualToString:@"animazioneTriangolo"]) {
        // TO DO
    }
}

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA