美文网首页
UITouch事件的传递和使用

UITouch事件的传递和使用

作者: kikido | 来源:发表于2016-05-26 23:05 被阅读243次

    直接上代码吧,该方法在UIView的.m里面

    传递方法

     - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        
        //判断点击的位置是否在RootView内部
        if (![self pointInside:point withEvent:event]) {
            return nil;
        }
     //获取所有的子视图
        NSArray *subViews = self.subviews;
        //遍历(从后到前)数组,依次判断每一个视图的情况
        for (NSInteger i = subViews.count - 1; i >= 0; i--) {
            //获取其中一个视图
            UIView *view = subViews[i];
            //隐藏视图(几乎完全透明的视图)不参与用户事件的分配
            if (view.hidden == YES || view.userInteractionEnabled == NO || view.alpha <= 0.001) {
                //跳过此视图的判断,直接进行下一个视图的判断
                continue;
            }
            //判断坐标点在不在视图之内
            //坐标系转换
            CGPoint pointForView = [self convertPoint:point toView:view];
            if ([view pointInside:pointForView withEvent:event]) {
                //当确定某一子视图接收到事件后,还需要让这个子视图再进行分配
                return [view hitTest:pointForView withEvent:event];
            }
        }
        
        //如果不在任意一个子视图中,则说明由RootView来接受事件
        return self;
    
    

    使用方法

    使用响应者链可以找到该视图的navigationcontroller然后跳转进去

    - (UINavigationController *)navigationController {
        
        UIResponder *responder = self.nextResponder;
        while (responder) {
            //NSLog(@"%@", responder);
            if ([responder isKindOfClass:[UINavigationController class]]) {
                return (UINavigationController *)responder;
            }
            responder = responder.nextResponder;
        }
        
        return nil;
    }
    

    相关文章

      网友评论

          本文标题:UITouch事件的传递和使用

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