2013-01-28 15 views
7

In una delle mie viste ho bisogno di animare la proprietà frame di un UIImageView e mentre lo faccio voglio mostrare una barra di avanzamento (UIProgressView) nella vista titolo della barra di navigazione. Il problema è se commento i seguenti blocchi di animazione, la barra di avanzamento viene aggiornata come previsto senza problemi. D'altra parte, a causa dell'animazione seguente, la barra di avanzamento si arresta in punti diversi e riporta di nuovo l'incremento.animateWithDuration: corrompe progress progress smooth

//add message bubble 
[UIView animateWithDuration:0.3 
         delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
        animations:^ 
{ 
    animationBubbleImageView.alpha = 1; 
} 
       completion:^(BOOL finished) 
{ 
    [self removeAutoCorrectionAndHighlight]; 
    [UIView animateWithDuration:0.3 
          delay:0 
         options:UIViewAnimationOptionAllowUserInteraction 
         animations:^ 
     { 
      CGRect bubbleFrame = CGRectMake(animationBubbleImageView.frame.origin.x, 
              animationBubbleImageView.frame.origin.y, 
              bubbleSize.width, 
              bubbleSize.height); 

      [animationBubbleImageView setFrame:bubbleFrame]; 
      messageLabel.alpha = 1; 
     } 
         completion:^(BOOL finished) 
     { 
      [self sendSubviewToBack:textView]; 
      [self.delegate moveBubbleToTableCell]; 
     }]; 
}]; 

blocchi animazione non bloccano il filo principale, ma ciò nessuna indicazione essere la ragione di beahviout unsmooth di th progresso?

UPDATE: Ciò che voglio ottenere è l'animazione della bolla MessageApp in IOS.While il messaggio digitato diventa una bolla e vola al suo posto la barra di avanzamento dovrebbe aumentare lentamente.

Se provo la stessa cosa con la progressbar di animazione, gli incrementi normali.

+1

Solo una supposizione sfrenata, la ragione potrebbe essere che si sta aggiornando l'interfaccia utente non dal thread principale. –

+0

Un'altra ipotesi selvaggia, ma hai controllato che nessuno del tuo codice nei 3 metodi chiamati da questo codice blocca il thread principale? – jhilgert00

+0

E sto solo provando a escludere tutto qui, ma di solito uso i float reali nel mio codice di animazione, cioè 0.0f rispetto a 0. – jhilgert00

risposta

1

Prova a mettere l'animazione della barra di avanzamento nella stessa animazione dell'animazione bolla. Oppure mettili tutti in un gruppo di animazione.

+0

In realtà non è possibile in questo caso perché l'animazione è divisa in due parti. La prima parte è la generazione della bolla e la barra di avanzamento dovrebbe iniziare ad incrementare lì. Quando la bolla è pronta, attiva la seconda animazione sul delegato method.IF ho avuto tutto il codice nella stessa classe che avrebbe gradito il tuo modo di consigliare –

-1

Hai provato gli strumenti per vedere cosa sta succedendo?

Wild guess: è anche possibile verificare se le due viste si sovrappongono inavvertitamente.

Se possibile, puoi anche provare a raggruppare le animazioni, come suggerito da "Papà".

Best, Akos