Swift: hitTest for UIView underneath another UIView

后端 未结 4 1489
闹比i
闹比i 2021-01-06 08:48

I have TransparentUIView on top of RedOrGreenUIView. TransparentUIView has a UILongPressGestureRecognizer attached to it. Once user begins a long touch on it, I check for .C

4条回答
  •  清酒与你
    2021-01-06 08:58

    Create a custom view for your container and override the pointInside: message to return NO when the point isn't within an eligible child view, like this:

    @interface PassthroughView : UIView
    @end
    
    @implementation PassthroughView
    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
        for (UIView *view in self.subviews) {
            if (!view.hidden && view.alpha > 0 && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event])
                return YES;
        }
        return NO;
    }
    @end
    

    swift version

    class PassThroughView: UIView {
    
         override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
                for subview in subviews as [UIView] {
                    if !subview.hidden && subview.alpha > 0 && subview.userInteractionEnabled && subview.pointInside(convertPoint(point, toView: subview), withEvent: event) {
                        return true
                    }
                }
                return false
            }
        }
    

提交回复
热议问题