Swift:在另一个UIView下面的UIView的hitTest

Kas*_*hif 4 xcode uiview hittest ios swift

我在RedOrGreenUIView之上有TransparentUIView.TransparentUIView附加了一个UILongPressGestureRecognizer.一旦用户开始长时间触摸,我会检查此LongPressGesture的.Changed状态,并在hitTest下执行:

var p:CGPoint = rec.locationInView(self.view)
var selectedView = view.hitTest(p, withEvent: nil)
if selectedView != nil {
   if selectedView == TransparentUIView {
       println("TransparentUIView is being touched")
   }
}
Run Code Online (Sandbox Code Playgroud)

我将TransparentView视为精选.但是我需要能够同时在RedOrGreenUIView上执行hitTest,它位于TransparentUIView下面.我无法理解这一点.请帮忙.

Sur*_*mas 11

为容器创建自定义视图并覆盖pointInside:message,当该点不在符合条件的子视图中时返回NO,如下所示:

@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
Run Code Online (Sandbox Code Playgroud)

快速版

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
        }
    }
Run Code Online (Sandbox Code Playgroud)