当快速滚动UIScrollView时,UIImageView停止调整大小

时间:2012-06-08 12:06:15

标签: iphone objective-c ios uiscrollview uiimageview

所以我在ScrollView里面有一个应该调整大小的imageView,它按照我想要的方式工作(在这里看一个小视频:https://dl.dropbox.com/u/80699/scroll.m4v

我所做的是设置UIScrollViewDelegate并使用scrollViewDidScroll方法根据滚动偏移调整图像大小

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    CGFloat scrollViewOffset = aScrollView.contentOffset.y;

    if(scrollViewOffset < 0.0f) {
        // postition top
        CGRect imageViewRect = self.imageView.frame;
        imageViewRect.origin.y = scrollViewOffset;

        if(scrollViewOffset < 0.0f && scrollViewOffset >= -50.0f) {
            CGFloat newBackdropHeight = kImageHeight - scrollViewOffset;
            imageViewRect.size.height = newBackdropHeight;
        }

        self.imageView.frame = imageViewRect;
    }
}

这里基本上发生的是,如果用户在顶部向上滚动(启用弹跳),则imageView会随着滚动扩展,直到达到一定量的偏移量(此处为60px)。

问题是,如果我滚动得非常快,图像会停止调整大小,但滚动视图的其余部分会像往常一样快速向下滚动。然后,当滚动视图快速向后拍摄时,图像会立即展开,然后按照应有的方式向下缩放(请参阅此处的视频:https://dl.dropbox.com/u/80699/scroll2.m4v)。

有了这种行为,用户出现不是很好,用户看到跳跃图像。

有人知道如何解决这个问题吗?

如果您想亲自查看行为,请参阅此示例项目:https://dl.dropbox.com/u/80699/scroll.zip

感谢您的帮助! 如果有什么不清楚,请发表评论

1 个答案:

答案 0 :(得分:1)

我快速查看了您的测试项目,我相信问题是当您快速滚动时,在调用回调时,Y偏移量大于-50,因此图像视图不会调整大小。 / p>

我通过删除内部if条件并为背景提供最大高度来解决此问题:

if(scrollViewOffset < 0.0f) {
    // postition top
    CGRect imageViewRect = self.imageView.frame;
    imageViewRect.origin.y = scrollViewOffset;

    CGFloat newBackdropHeight = kImageHeight - MAX(scrollViewOffset,-50.0);
    imageViewRect.size.height = newBackdropHeight;

    self.imageView.frame = imageViewRect;
}

希望有所帮助