我正在用滚动视图做同样的事情 - 延迟加载图像。实际上,我们必须加载一个被拉伸的缩略图(制作图像的模糊低分辨率版本),然后在页面实际 100% 显示在视图中时加载真实图像。
我要做的是在 scrollViewDidScroll:scrollView 中使用以下代码。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (!_isCurrentlyRotating) {
CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth)+1;
if (_currentPage != page)
[self setCurrentPage:page];
}
}
上面计算了将要显示的页面(作为您的滚动)。当页面视图显示 50% 时,它实际上会更改当前页码。这可以与页面控件结合使用以突出显示当前页面点。
使用上述方法,(在滚动视图上启用分页)当用户使用手指更改页面时(正常行为)scrollViewDidEndDecelerating:当页面 100% 显示时调用scrollView。 100% 我的意思是你只能看到一页而不是另一页的一部分。
但我们在滚动视图的末尾有一个“重新开始”按钮,它调用我的 scrollToPage: 函数。
- (void) scrollToPage:(int)page {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * page;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES];
}
使用 scrollRectToVisible:animated: 方法不会触发 scrollViewDidEndDecelerating: 方法,所以我只是添加了锐化方法(它只是在图像视图中加载高分辨率图像)调用这两个方法,以便在用户滚动时调用它或者如果按下重新开始按钮。
- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
[self sharpenImageView];
}
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self sharpenImageView];
}
我希望这会有所帮助!