2013-02-15 18 views
6

Ich habe eine horizontale UIScrollView. Ich möchte eine Variation der "Pull-to-Reset" -Animation machen, bei der ich bis zum rechten Rand der Inhaltsgröße der Bildlaufansicht ziehe, den Finger loslasse und die Bildlaufansicht zu (0, 0) zurückfliegen lässt) Inhalt Offset.Abbrechen UIScrollView Bounce nach dem Ziehen

Mein Delegatmethode sieht wie folgt aus:

- (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)]; 
    } 
} 

wo doAnimatedScrollTo: ein Animationsverfahren notwendig Brauch ist, weil ich die Dauer der Animation steuern möchten.

Während dies funktioniert, scheint die Animation in der Warteschlange zu stehen. Die UIScrollView "Bounce" -Animation passiert zuerst, dann erfolgt meine Animation.

Gibt es eine Möglichkeit, um die Bounce-Animation abzubrechen, den Inhalt Offset von "Snapping" zurück zu halten, und führen Sie dann meine Animation?

+0

haben Sie versucht, die Bounce-Eigenschaft für das Attribut i zu deaktivieren Nspector? – jcesarmobile

+0

@jcesar nein, weil ich die Bounce-Eigenschaft explizit will. Ich möchte nur nicht, dass die zweite Hälfte der Animation ausgeführt wird - dh. das "Zurückspringen". – 1actobacillus

+0

Dann glaube ich nicht, dass es möglich ist. Wenn Sie den Bounce verwenden, müssen Sie den vollen Bounce verwenden. Vielleicht, wenn Sie eine Unterklasse erstellen, können Sie die vollständige Animation ändern – jcesarmobile

Antwort

3

versuchen diese

- (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

ich erreicht die Bounce zurück Animation eines UIScrollView Cancelling.

Ich wollte das Standardverhalten während eines schnellen Scroll nach oben, wenn es springt. Wenn scrollview jedoch bereits oben ist und der Benutzer es herunterzieht und freigibt (analog zum Pull-to-Refresh), wollte ich die Kontrolle über den Bounce übernehmen und etwas Eigenes machen.

In Scrolldelegierten Spur I die Ausgangsposition:

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

In Scroll Delegierten erkennen, ob das Flag gesetzt ist und Scroll gezogen wird genug

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

     overrideBounce = YES; 
    } 
    isPullingTop = NO; 
} 

I Scrollunterklasse und die setContentOffset überschreiben:

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