我在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")
}
}
我将透明视图作为 selectedView 很好。然而,我需要能够同时在 RedOrGreenUIView 上进行 hitTest,它位于透明UIView 的下面。我无法集中注意力来完成这件事。请帮忙。
为容器创建自定义视图并覆盖 pointInside: 消息,当该点不在符合条件的子视图内时返回 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
快速版本
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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)