UIScrollView水平分页就像Mobile Safari标签一样

UIScrollView水平分页就像Mobile Safari标签一样

Mobile Safari允许您通过输入一种UIScrollView水平分页视图来切换页面,页面控件位于底部。

我试图复制这种特殊的行为,其中水平可滚动的UIScrollView显示下一个视图的一些内容。

Apple提供的示例:PageControl显示如何使用UIScrollView进行水平分页,但所有视图都占用整个屏幕宽度。

如何让UIScrollView显示移动Safari的下一个视图的某些内容?


森林海
浏览 514回答 3
3回答

杨__羊羊

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:修改如果您遇到子视图用户交互问题。

阿晨1998

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;防止剪切内容。
打开App,查看更多内容
随时随地看视频慕课网APP