2013-02-15 69 views
6

我有一个水平的UIScrollView。我想做一个“拉动到重置”动画的变体,在这里我拉过滚动视图内容大小的右边缘,松开手指,并让滚动视图飞回(0,0) )内容偏移量。拖动后取消UIScrollView反弹

我的委托方法是这样的:

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

,因为我想控制动画的时长doAnimatedScrollTo:是一个自定义动画的方法,必要的。

虽然这个工作,似乎动画排队。 UIScrollView“反弹”动画首先发生,然后我的动画发生。

有没有办法取消反弹动画,保持内容偏移“捕捉”回来,然后执行我的动画?

+0

是否尝试取消选中属性i上的反弹属性钢板检测? – jcesarmobile 2013-02-15 11:10:39

+0

@jcesar nope,因为我明确需要反弹属性。我只是不想让后半部分的动画执行 - 即。 “反弹”。 – 1actobacillus 2013-02-15 11:14:08

+0

然后我不认为这是可能的。如果您使用反弹,则必须使用完全反弹。也许如果你创建一个子类,你可以改变完整的动画 – jcesarmobile 2013-02-15 11:22:31

回答

3

试试这个

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

我完成取消超生一个UIScrollView的动画。

我想在退回时快速滚动到顶部时保留默认行为。然而,如果scrollview已经在顶部,然后用户拉下它并释放(类似于拉动刷新),我想控制跳回,并做一些自定义的事情。

在滚动视图委托我跟踪的初始位置:

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

在滚动视图代表检测如果该标志被设置和滚动视图被拖动足够

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

     overrideBounce = YES; 
    } 
    isPullingTop = NO; 
} 

我子类滚动视图并覆盖setContentOffset:

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