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 关注
- 605 浏览
添加回答
举报
