以编程方式滚动UIScrollView,然后通过手动滚动覆盖

时间:2014-02-12 22:46:11

标签: ios objective-c animation uiscrollview override

我希望滚动视图在用户首次加载屏幕时自动滚动...所以我正在使用此代码:

[UIView animateWithDuration:(float)1.25f
                     animations:^{
                         myScrollView.contentOffset = CGPointMake(2000, 800);
                     }
                     completion:nil];

因此代码工作得很好,UIScrollView模拟我想要的CGPoint的“滚动”(动画),但是如果用户想要手动将手指放在它上面并开始滚动或者只是停止它,那么它就会滚动直到它完成后才能覆盖这个动画。

任何人都有更好的方法可以通过覆盖功能来设置它的动画,以及什么时候调用所谓的覆盖功能(我假设这将涉及scrollView视图中的touchesBegan)

1 个答案:

答案 0 :(得分:1)

只需将UIViewAnimationOptionAllowUserInteraction添加到动画选项中:

[UIView animateWithDuration:1.25f delay:0.0f options:(UIViewAnimationOptionAllowUserInteraction) animations:^{
                     _scrollView.contentOffset = CGPointMake(0, 800);
                 }
                 completion:nil];

取消UIScrollView scrollViewWillBeginDragging:委托方法

上的动画
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    //Storing current offset
    CALayer *currentLayer = _scrollView.layer.presentationLayer;
    CGPoint scrollBoundsOrigin = currentLayer.bounds.origin;

    //Cancelling animations
    [_scrollView.layer removeAllAnimations];

    //Restore offset
    _scrollView.contentOffset = scrollBoundsOrigin;
}