for (NSInteger i = self.subviews.count - 1; i >= 0; i--) { // 从后往前遍历自己的子控件,将事件传递给子控件 UIView *childView = self.subviews[i]; CGPoint childPoint = [self convertPoint:point toView:childView]; // 把当前控件上的坐标系转换成子控件上的坐标系 UIView *fitView = [childView hitTest:childPoint withEvent:event]; if (fitView == self.homePageView) { // homePageView会阻挡底下了连麦视图的手势,所以绕过homePageView把响应链交给底下的连麦视图 for (NSInteger j = self.linkMicWindowsView.subviews.count - 1; j >= 0; j--) { UIView *grandChildren = self.linkMicWindowsView.subviews[j]; CGPoint grandChildrenPoint = [self convertPoint:point toView:grandChildren]; fitView = [grandChildren hitTest:grandChildrenPoint withEvent:event]; if (fitView) { return fitView; } } } if (fitView) { // 寻找到响应事件的子控件 return fitView; } }
O(n * m)