当前位置:  开发笔记 > 运维 > 正文

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

如何解决《UIScrollView水平分页就像MobileSafari标签一样》经验,为你挑选了4个好方法。

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

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

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

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



1> Ed Marty..:

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

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

创建一个包含其子视图的子UIView类(即ClipView)UIScrollView.从本质上讲,它应该具有你认为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:修改如果您遇到子视图用户交互问题.


对于那些遇到这种情况的人,最近要注意` - (void)scrollViewWillEndDragging :( UIScrollView*)scrollView withVelocity:(CGPoint)velocity targetContentOffset :( inout CGPoint*)targetContentOffset`添加到iOS5中的UIScrollViewDelegate意味着你不必去通过这个palaver了.
谢谢Ed.我使用了一个`UIScrollView`子类来延迟加载视图(在`layoutSubviews`中),并使用`clippingRect`来执行`pointInside:withEvent:`testing.工作得很好,不需要额外的容器视图.

2> Juri Pakaste..:

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


感谢您使用此代码,如何使用此修改从滚动视图边界中未包含的子视图(按钮)获取事件?如果按钮例如在中央滚动视图的边界内但不在外部,则它起作用.
这确实有帮助.它应作为所选答案的修改包含在内.
是! 这也使得滚动视图中的用户交互再次起作用!我必须在ClipView上将userInteractionEnabled设置为YES才能使其正常工作.

3> Nikolay Tabu..:

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

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

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



4> djneely..:

我自己选择了自定义UIScrollView,因为它是我看来最快捷,最简单的方法.但是,我没有看到任何确切的代码,所以我想分享.我的需求是UIScrollView具有较小的内容,因此UIScrollView本身很小,以实现分页效果.正如帖子所说,你无法滑过.但现在你可以.

创建一个类CustomScrollView和子类UIScrollView.然后,您需要做的就是将其添加到.m文件中:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
  return (point.y >= 0 && point.y <= self.frame.size.height);
}

这允许您从一侧滚动到另一侧(水平).相应地调整边界以设置滑动/滚动触摸区域.请享用!

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有