2013-02-15 11 views
6

Ho un UIScrollView orizzontale. Voglio fare una variazione dell'animazione "pull-to-reset", dove trascino completamente il bordo destro della dimensione del contenuto della vista di scorrimento, rilascia il mio dito e la vista di scorrimento torna a (0, 0) offset del contenuto.Annulla UIScrollView rimbalzo dopo il trascinamento

mio metodo delegato si presenta così:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
    //check if it exceeds a certain critical value 
    if (scrollView.contentOffset.x - (scrollView.contentSize.width - IMAGE_WIDTH) > 80) { 
     [self doAnimatedScrollTo:CGPointMake(0, 0)]; 
    } 
} 

dove doAnimatedScrollTo: è un metodo di animazione personalizzata necessaria perché voglio controllare la durata dell'animazione.

Mentre funziona, sembra che l'animazione sia accodata. L'animazione "rimbalzo" di UIScrollView viene eseguita per prima, quindi si verifica la mia animazione.

C'è un modo per annullare l'animazione di rimbalzo, mantenere l'offset del contenuto da "snap" indietro e quindi eseguire la mia animazione?

+0

hai provato a deselezionare la proprietà bounce sull'attributo i nspector? – jcesarmobile

+0

@jcesar no, perché voglio la proprietà bounce esplicitamente. Non voglio che la seconda parte dell'animazione venga eseguita, ad es. il "rimbalzo". – 1actobacillus

+0

Quindi non penso sia possibile. Se usi il rimbalzo devi usare il rimbalzo completo. Forse se crei una sottoclasse puoi cambiare l'animazione completa – jcesarmobile

risposta

3

provare questo

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
    //check if it exceeds a certain critical value 
    if (scrollView.contentOffset.x - (scrollView.contentSize.width - IMAGE_WIDTH) > 80) { 
    [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
    } 
} 
2

ho compiuto annullando il rimbalzo animazione di un UIScrollView.

Ho voluto lasciare il comportamento predefinito durante uno scorrimento rapido verso l'alto quando rimbalza. Tuttavia se scrollview è già in alto e poi l'utente lo abbassa e lo rilascia (analogo a pull per aggiornare) ho voluto prendere il controllo sul rimbalzo e fare qualcosa di personalizzato.

In ScrollView delegato a monitorare la posizione iniziale:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.y < 0.1) 
    { 
     isPullingTop = YES; 
    } 
} 

In ScrollView delegato rilevare se il flag è impostato e ScrollView viene trascinato abbastanza

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (isPullingTop && scrollView.contentOffset.y < -30) { 

     overrideBounce = YES; 
    } 
    isPullingTop = NO; 
} 

I sottoclasse ScrollView e override del setContentOffset:

-(void)setContentOffset:(CGPoint)contentOffset 
{ 
    if (!overrideBounce) 
    { 
     [super setContentOffset:contentOffset]; 
    } 
    else 
    { 
     //customs stuff goes here , for example an animation 
     overrideBounce = NO; 
    } 
} 
Problemi correlati