• ios hitTest及扩展---分解ZFPlayer


    核心1. 介绍

    - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event point :

    在接收器的局部坐标系(界)中指定的点。 event : 系统保证调用此方法的事件。

    如果从事件处理代码外部调用此方法,则可以指定nil。 returnValue : 视图对象是当前视图和包含点的最远的后代。

    如果点完全位于接收方的视图层次结构之外,则返回nil。

    目的在于 : 在视图的层次结构中寻找一个最适合的 view 来响应触摸事件。

    核心2.

    调用顺序:touch -> UIApplication -> UIWindow -> UIViewController.view -> subViews -> ....-> 合适的view

    事件传递顺序:view -> superView ...- > UIViewController.view -> UIViewController -> UIWindow -> UIApplication -> 事件丢弃

    扩展1. subview超出fatherView的bounds仍然需要响应点击事件

    /*

     Case1: 点击button1 & button2 不在self的区域都有效

     */

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

        

        //1.判断自己能否接收事件

        if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {

            return nil;

        }

        

        // 这里无需判断point是否在父View的bounds内,因为middleButton和rightButton部分区域超出的父View

        for (UIView *subview in [self.subviews reverseObjectEnumerator]) {

            CGPoint convertedPoint = [subview convertPoint:point fromView:self];

            UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];

            if (hitTestView) {

                return hitTestView;

            }

        }

        return self;

        

    }

     

     

     

    /*

     Case2: 点击button1不在self的区域《无》效

            点击button2不在self的区域《有》效

     */

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

        

        //1.判断自己能否接收事件

        if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {

            return nil;

        }

     

        CGPoint newPoint = [self convertPoint:point toView:button2];

        if ([button2 pointInside:newPoint withEvent:event]) {

            return button2;

        }

        

        return [super hitTest:point withEvent:event];

    }

     

    参考资料:https://blog.csdn.net/qq_18505715/article/details/78411052

     

     

  • 相关阅读:
    5.3公理系统
    5.2逻辑语言vs逻辑演算
    Spike-in 对照(Spike-in control)
    R 语言学习笔记(4)—— 数值&字符处理
    R 语言学习笔记(3)—— 基础绘图
    R语言学习笔记(2)——数据结构与数据集
    R 语言学习笔记(1)——R 工作空间与输入输出
    单核苷酸多态性SNP(single nucleotide polymorphism)
    你真的遵守编码规范了吗
    论牧羊犬如何混迹于Scrum圈
  • 原文地址:https://www.cnblogs.com/madaha/p/9685180.html
Copyright © 2020-2023  润新知