美文网首页
iOS scrollView自定义分页大小及subViews点击

iOS scrollView自定义分页大小及subViews点击

作者: 李琪_59dc | 来源:发表于2019-01-14 18:57 被阅读0次

    本篇主要解决以下需求场景:


    每次滚动距离 < 展示宽度

    代码结构的设计:

    1,外层UIView,用来整体封装。包含计时器、子视图scrollView的代理方法等。
    同时如果要求scrollView整体滚动展示区域设置背景色时,由于在自定义分页大小时,改小了scrollView的宽度。这时可以直接在外层View上操作。
    2,[UIView addSubview:scrollView]
    3,在scrollView上根据数据源,循环创建UIImageView并add到scrollView上


    实现自定义分页大小的主要思路:

    1,UIScrollView的contentSize属性,决定整体滚动展示区域的大小

    scrollView.contentSize = CGSizeMake(展示区域宽度, 展示区域高度);
    scrollView.pagingEnabled = YES;//启动分页效果
    

    2,UIScrollView的frame宽度,决定分页page的大小,即手每滑一次,滚动的距离

    scrollView.frame = 设置为实际想要分页的宽度(小于整体展示区域宽度)
    

    3,设置scrollView的clipsToBounds属性为NO:不裁剪子视图超出父视图的部分
    属性详细介绍见:https://www.jianshu.com/p/1f94bed28b93

    scrollView.clipsToBounds = NO;
    

    4,解决自定义分页大小后,内部子view 点击事件/手势 不响应的问题。
    (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; 系统的Hit-Testing方法,触摸屏幕时,探测由哪个对象最先响应,决定scrollView内部子view的点击事件or手势的响应

    //重写外层UIView的触摸手势响应链方法
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        if ([self pointInside:point withEvent:event]) {
            //触摸点在外层UIView的范围中,都优先响应子视图scrollView
            return scrollView;
        }
        return nil;
    }
    

    响应链、Hit-Testing,详细介绍:https://www.jianshu.com/p/77139b374313?open_source=weibo_search
    【注意!】如果scrollView中,每个UIImageView都有点击跳转事件,则要转换相对坐标系,加多一层判断:

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        if ([self pointInside:point withEvent:event]) {
            for (UIView *view in self.adScrollView.subviews) {
                //转换坐标系为imageView,进行对比
                CGPoint pointInImageView = [self convertPoint:point toView:view];
                if ([view pointInside:pointInImageView withEvent:event] && [view isKindOfClass:[UIImageView class]]) {
                    //优先响应imageView的点击事件
                    return view;
                }
            }
            //其次响应scrollView
            return self.scrollView;
        }
        return nil;
    }
    

    转换坐标系convertPoint、及判断点在范围内 详细介绍:http://www.cocoachina.com/ios/20161206/18297.html

    以上,希望其他人能少踩坑吧hhh

    相关文章

      网友评论

          本文标题:iOS scrollView自定义分页大小及subViews点击

          本文链接:https://www.haomeiwen.com/subject/reyorqtx.html