Ciao a tutti! In questo nuovo tips di programmazione iPhone vi spiegherò molto brevemente come ottenere animazioni semplici o articolate in un modo a dir poco semplicissimo! Il cuore di tutto sta in questi tre passaggi:
1. Definire l’animazione
[UIView beginAnimations:@"animation" context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
Qui si definiscono, come avrete senz’altro intuito, il nome dell’animazione, la sua durata ed eventualmente un delegato che verrà chiamato quando l’animazione termina.
2. L’animazione vera e propria
[theView setAlpha:0];
In questo nostro esempio imposto semplicemente il valore di “Alpha” che il mio oggetto dovrà avere a fine animazione, il resto lo farà Objective-C!
Sarà lui, infatti, a creare l’animazione dal passaggio dal valore attuale di alpha (quello prima della nostra istruzione) a tutti i valori successivi fino al quello indicato proprio con la nostra riga di codice (che vedete sopra). Nel nostro caso, a fine animazione, l’oggetto diverrà trasparente e avremmo così ottenuto un effetto di dissolvenza, molto carino.
3. Fine del blocco di animazione
[UIView commitAnimations];
NOTA: è chiaro che nel blocco dove definite “cosa deve fare” l’animazione potrete mettere quanti oggetti volete, o ancora modificare il frame e quant’altro!
Per maggiore chiarezza vi ho preparato un piccolo esempio, che potete scaricare da QUI.
Nel progetto troverete un’immagine che si dissolve e una toolbar che scompare spostandosi al di sotto dello schermo. In questo esempio, l’animazione parte al tocco dello schermo in qualsiasi punto, ma voi potrete ovviamente impostare le vostre animazioni come meglio preferite!
18 Responses to “TIPS#015 – Creare animazioni per i nostri oggetti in 3 passi”
26 Ottobre 2010
Tweets that mention Creare animazioni per i nostri oggetti in 3 passi [Objective-C] | devAPP -- Topsy.com[…] This post was mentioned on Twitter by FabrizioGaucci and devAPP, Bubi Devs. Bubi Devs said: TIPS#015 – Creare animazioni per i nostri oggetti in 3 passi: Ciao a tutti! In questo nuovo tips di programmazione… http://bit.ly/choYy6 […]
26 Ottobre 2010
fabriziorubato da http://www.cescobaz.altervista.org/home/
ladri
26 Ottobre 2010
Staff devAPP@fabrizio wow che bella conclusione affrettata ehehhe ^^
Dai un’occhiata al nome dell’autore di questo tips ^^
L’autore, Francesco Burelli, scrive per noi su devAPP e i suoi articoli li riporta anche nel suo blog personale “cescobaz”.
Piccola precisazione: noi di devAPP non rubiamo niente! Cerchiamo di offrirvi contenuti il più originali possibili e, per quanto possiamo, farina del nostro sacco! Per i pochissimi articoli tradotti per voi da altri siti stranieri abbiamo comunque e SEMPRE un’autorizzazione scritta da parte degli autori e in ogni caso citiamo sempre, come è giusto che sia, l’articolo originale. Essendo circa 40 autori, poi, potrebbe anche sfuggire qualcosa agli editor che programmano le pubblicazioni degli articoli, (fortunatamente ad oggi non mi pare sia sfuggito nulla di così grave, anche se potrebbe capitare), ma da qui a darci dei ladri ^^ mi sembra un tantino eccessivo 😉 Basta una segnalazione 😉 Prima di attaccare con affermazioni del genere (direi abbastanza pesanti) conviene avere ALMENO la certezza di quello che si sta per dire 😉
Ricordo infine che siamo qui per voi, gratis, non chiediamo nulla a nessuno.. Siamo una Community completamente free e vogliamo semplicemente diffondere le nostre conoscenze con tutti voi, anche con chi è alle prime armi che può trovare nelle nostre pagine un piccolo aiuto durante la sua nuova avventura.
Nulla di personale, sia chiaro.. Il tuo commento è bello che approvato insomma.. e una risposta era d’obbligo! Detto questo ti saluto e buona permanenza sulle nostre pagine 🙂
26 Ottobre 2010
Francesco BurelliGrazie @fabrizio che mi segui su “cescobaz.altervista.org” :), ma come è già stato detto io scrivo anche su questo sito quindi riporto gran parte degli articoli da entrambe le parti.
DevApp è un sito serio non ruberebbe mai.
Saluti!
26 Ottobre 2010
FrancescoSalve,
Credo che abbia esagerato nel darvi dei ladri da quello che ho capito non e’ nemmeno il proprietario dell’altro blog. Bho
Comunque il delegato ritorna qualcosa? [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; ? E come posso usare il valore di ritorno? Grazie.
26 Ottobre 2010
Francesco Burelli(Sono io il “proprietario” dell’altro blog, comunque nessun problema è stato solo un po’ impulsivo, ora avrà capito come stanno le cose)
Allora il metodo al delegato lo si può sfruttare per dire a qualcuno che l’animazione è finita, infatti se l’animazione durasse 10 secondi, senza usare un timer o cose simili, quando viene chiamato il delegato vuol dire che l’animazione è conclusa e il delegato può proseguire a fare altro di conseguenza.
Si potrebbero fare anche delle animazioni in sequenza…. appena finisce una ne parte un’altra…
26 Ottobre 2010
Francesco BurelliScusa dimenticavo, il metodo deve essere del tipo
– (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;
Trovi tutte le informazioni dettagliate come sempre nella documentazione Apple sotto la classe UIView
26 Ottobre 2010
fabrizioallora scusate. è che capitano purtroppo molto spessi questi fattacci.
mia culpa
26 Ottobre 2010
fabriziopremetto che l’autore ho fatto veramente fatica a vederlo, colpa di un corpo del font un pò piccolino e del colore che non contrasta con il background.
poi per accorgermi che effettivamente sia lo stesso autore c’è da fare un controllo incrociato stile investigatore. 😀
26 Ottobre 2010
Staff devAPPSi questo si, dico solo di non arrivare a conclusioni affrettate, ancor peggio in pubblico 😉 Ad ogni modo nessun problema.. Se hai bisogno siamo qui 😉
27 Ottobre 2010
fabrizionon è possibile editare commenti. non si può fare proprio nulla?
10 Dicembre 2010
Ragazzettoprovo a fare una domanda magari è semplice ma da solo non la sfango !
Allora , l’ animazione mi funziona , ma se io volessi far eseguire due animazioni in sequenza e non in conteporanea ?
Se metto le due animazioni tra
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
e
[UIView commitAnimations];
vengono eseguite conteporaneamente !
e se invece volessi mandare la mia animazione in loop come devo fare ? ad esempio far lampeggiare un immagine facendo variare l’ alpha da 0 a 1 e viceversa continuamente ?
Grazie in anticipo
Sperando che non sia tremendamente complesso 😉
11 Dicembre 2010
Francesco BurelliOk, non è difficilissimo!
Premettendo che come hai intuito tu non puoi usare lo stesso blocco UIView… vuol dire che ne devi fare due e usarli in momenti diversi. Quindi
1. crea un metodo che fa comparire l’oggetto (alpha = 1.0);
2. crea un metodo che fa Scomparire l’oggetto (alpha = 0.0);
3. nel metodo delegato (il metodo che ti notifica la fine dell’animazione) se la fine dell’animazione è per la “comparsa” chiami il metodo per la scomparsa e viceversa.
un esempio
– (void)compari {
[UIView beginAnimations:@”compare” context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[oggetto setAlpha:1.0];
[UIView commitAnimations];
}
– (void)scompari {
[UIView beginAnimations:@”scompare” context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[oggetto setAlpha:0.0];
[UIView commitAnimations];
}
// delegato
– (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
if([animationID isEqualToString:@”compare”]) {
[self scompari];
}
else if([animationID isEqualToString:@”scompare”]) {
[self compari];
}
}
Nota che puoi anche fare che compaia lentamente e scompaia velocemente e viceversa! Basta modificare i tempi di una o l’altra animazione.
Lo scritto al momento quindi non so se funziona, ma teoricamente è corretto.
Fammi sapere ciao
12 Dicembre 2010
RagazzettoGrazie francesco !
17 Marzo 2011
Creare animazioni di oggetti con una sola riga di codice [Objective-C] | devAPP[…] veloce Tips di programmazione in Xcode, nello specifico vedremo una soluzione alternativa al “TIPS#015 – Creare animazioni per i nostri oggetti in 3 passi” scritto tempo fa da Francesco Burelli. Vedremo come creare l’animazione di un oggetto […]
5 Agosto 2011
jaxmaciao ragazzi complimenti per l’articolo!!
volevo chiedere se qualcuno sa come produrre una animazione che permette di muovere un oggetto, ad es. una ruota che gira, ma in maniera realistica, cioè rallentando con un movimento naturale. Mi spiego meglio. Pensate al pickerview che gira tanto più veloce e più a lungo quanto più veloce è stato il movimento sullo schermo, oppure alla classica ruota della fortuna..
Grazie mille
5 Agosto 2011
Francesco Burelli#14 io farei nel seguente modo:
un timer che ogni millisecondo effettua una rotazione secondo un’equazione. Il problema è l’equazione, intuitivamente si potrebbe pensare a una variabile A che viene decrementata ogni volta che il metodo del timer viene chiamato (quindi ogni millisecondo). La variabile A poi moltiplicata per una costante, determina di quanto ruota l’oggetto. Infine, più l’accelerazione del dito è stata maggiore, più il valore iniziale di A sarà maggiore.
Quando A sarà a 0 o prossima allo 0 allora il timer cessa di funzionare e l’animazione è completata
7 Agosto 2011
jaxmaciao grazie per aver risposto.. in effeti avevo pensato anche io ad una soluzione “manuale” .. pensavo che forse esiste un tipo di animazione “innata” che apple da qualche parte ha inserito e che potrebbe essere utilizzata. Per intenderci quando usiamo la uitableview ad es. la decellerazione che viene usata a seconda della velocità del dito…