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

标签 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)。

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

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

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

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

感谢您的帮助! 如果还有什么不清楚的地方,请留言

最佳答案

我快速浏览了您的测试项目,我相信问题是当您快速滚动时,调用回调时 Y 偏移量大于 -50,因此 ImageView 不会调整大小。

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

希望对你有帮助

关于iphone - 快速滚动 UIScrollView 时 UIImageView 停止调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10948532/

相关文章:

ios - CLLocationManager didUpdateLocations 被多次调用

ios - 如何初始化 UITableView?既来自 XIB 又以编程方式?

iOS 为什么在设置 NSBaselineOffsetAttributeName 时 NSTextAttachment 会消失?

ios - 解析包含数组元素的对象

iphone - UILabel 更新在滚动期间停止 UIScrollView

iphone - iPod Touch 4G 认为它是 iPad

ios - 发送到已释放实例错误的消息

ios - 未佩戴 watch 时,Apple Watch 本地通知不起作用

ios - HID 服务不可见

ios - didSelectItemAtIndexPath 修改 UICollectionView 中的多个单元格