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

Posted

技术标签:

【中文标题】快速滚动 UIScrollView 时 UIImageView 停止调整大小【英文标题】:UIImageView stops resizing when fast scrolling a UIScrollView 【发布时间】:2012-06-08 12:06:14 【问题描述】:

所以我在 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 会随着滚动扩展直到一定的偏移量(此处为 60 像素)。

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

使用这种行为,用户体验不是很好,用户会看到一个跳跃的图像。

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

如果您想亲自查看行为,这里有一个小示例项目:https://dl.dropbox.com/u/80699/scroll.zip

感谢您的帮助! 有什么不明白的,欢迎留言

【问题讨论】:

【参考方案1】:

我快速浏览了您的测试项目,我认为问题在于,当您快速滚动时,调用回调时 Y 偏移量已大于 -50,因此不会调整图像视图的大小。

我通过删除内部 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;

希望有帮助

【讨论】:

以上是关于快速滚动 UIScrollView 时 UIImageView 停止调整大小的主要内容,如果未能解决你的问题,请参考以下文章

通过 UiscrollView 快速滚动到 UITextField 仅作为第一次错误

UIScrollView 的灵敏度/滚动速度与分页

iOS:如何为 UIScrollView 设置约束

触摸时暂停 UIScrollView 的滚动

UIscrollview 不能快速滚动

快速禁用 UIScrollView 中的垂直滚动?