我有一个包含大图像的UIScrollView,并使用分页在图像之间滚动。为了节省内存,我只在当前可见的图像之前和之后加载一个图像,并在滚动完成后加载/释放新图像。当一个快速滚动并且未调用scrollViewDidEndDecelerating时会发生此问题。 当调用scrollViewDidEndDecelerating时,我想在活动页面中显示图像名称。
我该如何解决这个问题?为什么会这样?
答案 0 :(得分:0)
我用滚动视图做同样的事情 - 延迟加载图像。我们实际上必须加载一个拉伸的缩略图(制作图像的模糊低分辨率版本),然后在页面实际显示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:function。
- (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:方法,所以我只是添加了sharpen方法(它只是在图像视图中加载高分辨率图像)调用这两种方法,以便在用户滚动时调用它或者如果按下了重启按钮。
- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
[self sharpenImageView];
}
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self sharpenImageView];
}
我希望这有帮助!
答案 1 :(得分:0)
有时只需清理项目并重新运行
Shift& Cmd& ķ 转移& Cmd& Alt& ķ
答案 2 :(得分:0)
scrollViewDidEndDragging将在每次滚动完成后调用
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{}
scrollViewDidEndDecelerating不会在每次拖动时调用(如果在拖动停止后没有以加速度拖动它将永远不会调用此函数)
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{}
scrollViewDidEndScrollingAnimation如果你想移动滚动视图使用api而不是拖动,这个api会被调用。
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{}
答案 3 :(得分:0)
检查您的UIScrollView
的代表是否已设置,或者设置为nil。
通常以这种方式设置scrollView.delegate = self
。
答案 4 :(得分:-1)
scrollViewDidEndDecelerating:
并不意味着您的页面布局。您应该实现scrollViewDidScroll:
并根据滚动视图的contentOffset
计算当前可见的页面。如果可见范围已更改,请为以前不可见的页面添加视图,并删除不再可见的页面。