如何让UIScrollView(pagingEnabled)每次移动1.2页?

问题描述 投票:0回答:1

好的。故事是这样的:

我有一个全屏的 UIWebView,宽度 = 768

它加载多个图像,并且这些图像位于一行中,这意味着 UIWebView 将仅水平滚动。

现在,我将 UIWebView 内的 UIScrollView 设置为 pagingEnabled = YES。所以 UIWebView 上的滚动会一页一页地移动。

问题是每个图像的宽度约为 900。我不会将它们缩小,如果我滚动 UIWebView,从第二页开始,总是会显示上一张图像的 132 点。这对我来说不太好。

那么,如果视图的框架宽度为 768,如何操作 UIWebView 或 UIWebView 内的 UIScrollView,以便每次滚动将移动 900 点的页面?

限制是:

  1. 我无法更改其内容大小

  2. 我无法更改其边界或框架

我说这些约束是因为 UIWebView 在加载内容时会根据自己的目的更改它们。

有人想参加这个头脑风暴吗?

谢谢

ipad pagination uiscrollview uiwebview
1个回答
1
投票

我认为您需要设置一个 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];
}

我没有对此进行测试,您可能需要也可能不需要禁用某些点的触摸。

© www.soinside.com 2019 - 2024. All rights reserved.