Mobile Safari允许您通过输入一种UIScrollView水平分页视图来切换页面,页面控件位于底部.
我试图复制这种特殊的行为,其中水平可滚动的UIScrollView显示下一个视图的一些内容.
Apple提供的示例:PageControl显示如何使用UIScrollView进行水平分页,但所有视图都占用整个屏幕宽度.
如何让UIScrollView显示移动Safari的下一个视图的某些内容?
UIScrollView
启用分页的A 将停止在其帧宽(或高度)的倍数处.因此,第一步是确定您希望页面的宽度.使那宽度UIScrollView
.然后,设置您需要的子视图大小,并根据UIScrollView
宽度的倍数设置它们的中心.
然后,因为要查看其他页,当然,设置clipsToBounds
以NO
作为mhjoy说明.现在的技巧部分是当用户在UIScrollView
框架范围之外开始拖动时使其滚动.我的解决方案(当我最近必须这样做时)如下:
创建一个包含其子视图的子UIView
类(即ClipView
)UIScrollView
.从本质上讲,它应该具有你认为UIScrollView
在正常情况下会有的框架.放置UIScrollView
在了中心ClipView
.确保ClipView
的clipsToBounds
设定为YES
如果其宽度小于其父视图.另外,ClipView
需要参考一下UIScrollView
.
最后一步是覆盖- (UIView *)hitTest:withEvent:
内部ClipView
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { return [self pointInside:point withEvent:event] ? scrollView : nil; }
这基本上扩展了UIScrollView
其父视图框架的触摸区域,正是您所需要的.
另一种选择是子类化UIScrollView
并覆盖它的- (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
方法,但是你仍然需要一个容器视图来进行剪切,并且可能很难YES
根据UIScrollView
框架确定何时返回.
注意: 您还应该查看Juri Pakaste的hitTest:withEvent:修改如果您遇到子视图用户交互问题.
ClipView
上面的解决方案对我有用,但我不得不做一个不同的-[UIView hitTest:withEvent:]
实现.Ed Marty的版本没有让用户交互处理垂直滚动视图我在水平滚动视图中.
以下版本对我有用:
-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event { UIView* child = nil; if ((child = [super hitTest:point withEvent:event]) == self) return self.scrollView; return child; }
设置scrollView的帧大小,因为您的页面大小将是:
[self.view addSubview:scrollView]; [self.view addGestureRecognizer:mainScrollView.panGestureRecognizer];
现在你可以平移self.view
,滚动滚动上的内容.
还用于scrollView.clipsToBounds = NO;
防止剪切内容.
我自己选择了自定义UIScrollView,因为它是我看来最快捷,最简单的方法.但是,我没有看到任何确切的代码,所以我想分享.我的需求是UIScrollView具有较小的内容,因此UIScrollView本身很小,以实现分页效果.正如帖子所说,你无法滑过.但现在你可以.
创建一个类CustomScrollView和子类UIScrollView.然后,您需要做的就是将其添加到.m文件中:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { return (point.y >= 0 && point.y <= self.frame.size.height); }
这允许您从一侧滚动到另一侧(水平).相应地调整边界以设置滑动/滚动触摸区域.请享用!