好的。故事是这样的:
我有一个全屏的 UIWebView,宽度 = 768
它加载多个图像,并且这些图像位于一行中,这意味着 UIWebView 将仅水平滚动。
现在,我将 UIWebView 内的 UIScrollView 设置为 pagingEnabled = YES。所以 UIWebView 上的滚动会一页一页地移动。
问题是每个图像的宽度约为 900。我不会将它们缩小,如果我滚动 UIWebView,从第二页开始,总是会显示上一张图像的 132 点。这对我来说不太好。
那么,如果视图的框架宽度为 768,如何操作 UIWebView 或 UIWebView 内的 UIScrollView,以便每次滚动将移动 900 点的页面?
限制是:
我无法更改其内容大小
我无法更改其边界或框架
我说这些约束是因为 UIWebView 在加载内容时会根据自己的目的更改它们。
有人想参加这个头脑风暴吗?
谢谢
我认为您需要设置一个 UIScrollView 委托来跟踪触摸的开始和结束。 更具体地说,我认为您需要使用scrollViewDidEndDragging:willDecelerate,因为它会在用户从设备上抬起手时立即触发。
首先, pagingEnabled=NO 似乎很明显,我们必须控制自己的分页。 我不觉得太难。 跟踪scrollViewDidScroll:中的滚动方向,以便我们有一些全局设置: BOOL isGoingRight = YES 或 NO(NO 表示最后一次移动是向左) 浮动页面大小 = 900.0;
这是我的滚动视图委托方法处理分页的方式。
- (void) scrollViewDidEndDragging:(UIScrollView*)_scrollView willDecelerate:(BOOL)willDecelerate {
float offsetProportion = _scrollView.contentOffset.x/_scrollView.frame.size.width;
//depending upon our direction, round up or down
int page = isGoingRight? ceilf(offsetProportion): floorf(offsetProportion);
//manually finish the scroll
[_scrollView scrollRectToVisible:CGRectMake(page*PAGESIZE, 0, _scrollView.frame.size.width, _scrollView.frame.size.height) animated:YES];
}
我没有对此进行测试,您可能需要也可能不需要禁用某些点的触摸。