我有一个水平的UIScrollView。我想做一个“拉动 - 重置”动画的变体,在那里我一直拉过滚动视图的内容大小的右边缘,释放我的手指,并让滚动视图飞回(0,0 )内容抵消。
我的委托方法如下所示:
- (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 :(得分: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];
}
}
答案 1 :(得分:2)
我完成了取消UIScrollView的反弹动画。
我希望在弹跳时快速滚动到顶部时保留默认行为。然而,如果scrollview已经在顶部,然后用户将其拉下并释放(类似于拉动刷新),我想控制反弹并做一些自定义的事情。
在scrollview委托中,我跟踪初始位置:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0.1)
{
isPullingTop = YES;
}
}
在scrollview委托中检测是否设置了标志并且拖动了scrollview
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (isPullingTop && scrollView.contentOffset.y < -30) {
overrideBounce = YES;
}
isPullingTop = NO;
}
我将scrollview子类化并覆盖setContentOffset:
-(void)setContentOffset:(CGPoint)contentOffset
{
if (!overrideBounce)
{
[super setContentOffset:contentOffset];
}
else
{
//customs stuff goes here , for example an animation
overrideBounce = NO;
}
}