3 回答
TA贡献1943条经验 获得超7个赞
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:修改如果您遇到子视图用户交互问题。
TA贡献2037条经验 获得超6个赞
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;}
TA贡献1816条经验 获得超4个赞
设置scrollView的帧大小,因为您的页面大小将是:
[self.view addSubview:scrollView];[self.view addGestureRecognizer:mainScrollView.panGestureRecognizer];
现在你可以平移self.view
,滚动滚动上的内容。
还用于scrollView.clipsToBounds = NO;
防止剪切内容。
- 3 回答
- 0 关注
- 547 浏览
添加回答
举报