2013-01-02 13 views
15

Desidero qualcosa di simile allo scopo su Flipboard leggermente sfocata animazione all'avvio dell'app. Flipboard quando lanciato ha questo leggero capovolgimento su e giù per mostrare agli utenti che non hanno familiarità con l'interfaccia che è sfogliabile.Animazione UIScrollView per iOS dopo l'animazione

Ho un UIScrollView che voglio animare un po 'per mostrare all'utente che è scorrevole. Quindi voglio scorrere leggermente verso destra e indietro. UIScrollView ha un messaggio setContentOffset:animated: senza clausola di completamento. Trovo che chiamarlo due volte non abbia apparentemente alcuna animazione. Cosa succede se voglio un'animazione dopo l'animazione in successione?

MODIFICA: Grazie Levi per la risposta. E per la cronaca, ci sono UIViewAnimationOptionAutoreverse e UIViewAnimationOptionRepeat che posso usare. Quindi questo è quello che ho finito con quel lavoro.

CGPoint offset = self.scrollView.contentOffset; 
CGPoint newOffset = CGPointMake(offset.x+100, offset.y); 

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoreverse |UIViewAnimationOptionRepeat animations:^{ 
    [UIView setAnimationRepeatCount: 2]; 
    [self.scrollView setContentOffset:newOffset animated: NO]; 
} completion:^(BOOL finished) { 
    [self.scrollView setContentOffset:offset animated:NO]; 
}]; 

risposta

19

due opzioni:

1) utilizzare il -(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView delegato di callback

2) Prova a metterlo in un blocco di animazione (con ... animated:NO];), che ha la parte di completamento.

+0

Grande che sembra funzionare, grazie. :) – huggie

+0

Ha funzionato ma l'animazione non utilizza la durata che ho fornito. Sta prendendo il suo tempo predefinito. – Developer

30

Per uno ScrollView, tableView o CollectionView se si fa qualcosa di simile:

[self.collectionView setContentOffset:CGPointMake(self.collectionView.contentOffset.x+260.0, 
                self.collectionView.contentOffset.y) 
          animated:YES]; 

allora si otterrà indietro un:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 

quando termina di scorrimento.

NON si ottiene questa richiamata se l'utente sposta la vista.

+3

Questa è la risposta più corretta – Lolloz89

+0

Questa (ottima) risposta è valida solo quando TUTTE le chiamate setContentOffset devono portare alla stessa funzione. Se, ad esempio, "completamento" era necessario solo per alcune chiamate a setContentOffset, per ottenere ciò dovresti disporre di alcune acrobazie di codice. –

+4

Inoltre, se non c'è animazione (ad esempio, l'offset di scorrimento è 0), scrollViewDidEndScrollingAnimation non viene chiamato. –

Problemi correlati