为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2019-07-31 14:34:26
UIScrollView水平分页就像Mobile Safari标签一样Mobile Safari允许您通过输入一种UIScrollView水平分页视图来切换页面,页面控件位于底部。我试图复制这种特殊的行为,其中水平可滚动的UIScrollView显示下一个视图的一些内容。Apple提供的示例:PageControl显示如何使用UIScrollView进行水平分页,但所有视图都占用整个屏幕宽度。如何让UIScrollView显示移动Safari的下一个视图的某些内容?
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

UIScrollView启用分页的A 将停止在其帧宽(或高度)的倍数处。因此,第一步是确定您希望页面的宽度。使那宽度UIScrollView。然后,设置您需要的子视图大小,并根据UIScrollView宽度的倍数设置它们的中心。

然后,因为要查看其他页,当然,设置clipsToBoundsNO作为mhjoy说明。现在的技巧部分是当用户在UIScrollView框架范围之外开始拖动时使其滚动。我的解决方案(当我最近必须这样做时)如下:

创建一个包含其子视图的子UIView类(即ClipViewUIScrollView。从本质上讲,它应该具有你认为UIScrollView在正常情况下会有的框架。放置UIScrollView在了中心ClipView。确保ClipViewclipsToBounds设定为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:修改如果您遇到子视图用户交互问题。


查看完整回答
反对 回复 2019-07-31
?
阿晨1998

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;}


查看完整回答
反对 回复 2019-07-31
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

设置scrollView的帧大小,因为您的页面大小将是:

[self.view addSubview:scrollView];[self.view addGestureRecognizer:mainScrollView.panGestureRecognizer];

现在你可以平移self.view,滚动滚动上的内容。
还用于scrollView.clipsToBounds = NO;防止剪切内容。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 519 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信