2010-06-27 8 views
55

Sto cercando di implementare un gioco utilizzando l'SDK di iPhone OS 4.0 (iOS4?). Nelle versioni precedenti di SDK, ho utilizzato [UIView beginAnimations: context:] e [UIView commitAnimations] per creare animazioni. Tuttavia, quando guardo la documentazione delle funzioni in 4.0, vedo questo commento.Quali sono i metodi di animazione basati su blocchi in iPhone OS 4.0?

L'uso di questo metodo è sconsigliato in iPhone OS 4.0 e versioni successive. Dovresti utilizzare invece dei metodi di animazione basati su blocchi .

si può trovare qui: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/clm/UIView/commitAnimations

La mia domanda è, quali sono le animazioni basati su blocchi in iPhone OS 4.0? Ho pensato che le funzioni beginAnimations: context: e commitAnimations fossero utilizzate per creare blocchi di animazione ..

risposta

42

Se segui quel collegamento e scorri un po ', vedrai nuovi metodi animati in ios4.

animateWithDuration:animations: 
animateWithDuration:animations:completion: 
animateWithDuration:delay:options:animations:completion: 

Esistono anche alcuni metodi di transizione correlati. Per ciascuno di questi, l'argomento animazioni è un block object:

animazioni
Un oggetto blocco contenente le modifiche di impegnarsi per le viste. Qui è dove a livello di programmazione è possibile modificare le proprietà animabili di le viste nella gerarchia della vista. Questo blocco non accetta parametri e non ha valore di ritorno . Questo parametro non deve essere essere NULL.

Block objects fanno parte della Concurrent Programming

118

Ho inviato un esempio nel mio blog:

CGPoint originalCenter = icon.center; 
    [UIView animateWithDuration:2.0 
      animations:^{ 
       CGPoint center = icon.center; 
       center.y += 60; 
       icon.center = center; 
      } 
      completion:^(BOOL finished){ 

       [UIView animateWithDuration:2.0 
         animations:^{ 
          icon.center = originalCenter; 
         } 
         completion:^(BOOL finished){ 
          ; 
         }]; 

      }]; 

Il codice di cui sopra animerà un UIImageView * (icona) in 2 secondi di animazione. Una volta completata, un'altra animazione sposterà l'icona nella sua posizione originale.

+18

+1 per autopromozione sfacciata (e una buona risposta :) –

+1

Perché non usa '[UIView setAnimationRepeatAutoreverses: YES];' nel blocco di animazione e 'self.transform = CGAffineTransformIdentity;' nel blocco di completamento? :) –

+1

come posso ripetere questa animazione? –

20

Ecco un esempio molto semplice. Il codice appena svanisce un UIView e lo nasconde dopo l'animazione è fatto:

[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^ { 
        bgDisplay.alpha = 0.0; 
       } 
       completion:^(BOOL finished) { 
        bgDisplay.hidden = YES; 
       }]; 

o in formattazione diversa:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^ { 
    bgDisplay.alpha = 0.0; 
} completion:^(BOOL finished) { 
    bgDisplay.hidden = YES; 
}]; 
+0

Solo un avviso che l'opzione sopra elencata è deprecata in 6.0 - http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html – PruitIgoe

+1

Che cosa è esattamente deprecato in 6.0 ? Né UIViewAnimationCurveEaseInOut né animateWithDuration sono contrassegnati come deprecati! – cldrr

Problemi correlati