美文网首页
hitTest断当前控件能否接收事件

hitTest断当前控件能否接收事件

作者: kadis | 来源:发表于2024-04-24 11:14 被阅读0次
  • (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    {

    // 1.判断当前控件能否接收事件
    if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;

    // 2. 判断点在不在当前控件
    if ([self pointInside:point withEvent:event] == NO) return nil;

    // 3.从后往前遍历自己的子控件
    NSInteger count = self.subviews.count;

    for (NSInteger i = count - 1; i >= 0; i--) {
    UIView *childView = self.subviews[i];

      // 把当前控件上的坐标系转换成子控件上的坐标系
      CGPoint childP = [self convertPoint:point toView:childView];
      
      UIView *fitView = [childView hitTest:childP withEvent:event];
      
      
      if (fitView) { // 寻找到最合适的view
          return fitView;
      }
    

    }
    // 循环结束,表示没有比自己更合适的view
    return self;
    }

相关文章

  • iOS 事件的传递

    如何寻找最合适的view 主窗口接收到应用程序传递过来的事件后,首先判断自己能否接收触摸事件。(hitTest:w...

  • 事件的传递

    事件的传递 hitTest的方法 hitTest:是控件方法 hitTest作用:就是帮你寻找最合适的View h...

  • 2020-09-08

    事件的传递是从上到下(父控件到子控件),hitTest:withEvent:方法pointInside方法 事件的...

  • hitTest和pointInside方法你真的熟吗?

    hittest方法 就是用来寻找最合适的view 当一个事件传递给一个控件,就会调用这个控件的hitTest方法 ...

  • hitTest和pointInside方法

    hitTest: withEvent:方法 事件传递的时候调用 当事件传递给控件的时候,就会调用控件的这个方法,去...

  • iOS开发篇 - 触摸事件传递&事件响应链

    触摸事件的传递 触摸事件的传递是从父控件传递到子控件 如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件...

  • iOS随笔 hit-test

    应用接收到touch事件,会按照事件响应链的顺序执行hitTest方法去获取touch对应的视图。 UIAppli...

  • 子控件超出父控件响应点击事件

    hitTest的底层实现: 先看自己是否能接受触摸事件 再看触摸点是否在自己身上 从后往前遍历子控件,拿到子控件后...

  • 事件处理以及响应者链条(三)

    事件的产生和传递 先调用hittest找到最适合响应的控件,然后再用touchbegan把事件往下传 完整过程 1...

  • ios事件处理

    ios 事件处理 先要找到合适的view来处理事件,找view的过程为先通过hitTest 判断当前的view...

网友评论

      本文标题:hitTest断当前控件能否接收事件

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