首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift: hitTest表示UIView在另一个UIView下面

Swift: hitTest表示UIView在另一个UIView下面
EN

Stack Overflow用户
提问于 2015-03-17 19:18:29
回答 4查看 23.9K关注 0票数 4

我把TransparentUIView放在RedOrGreenUIView上面。TransparentUIView有一个UILongPressGestureRecognizer附在上面。一旦用户开始长时间地触摸它,我将检查这个LongPressGesture的LongPressGesture状态,并在hitTest下面执行:

代码语言:javascript
复制
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")
   }
}

我把TransparentView当selectedView很好。但是,我需要能够同时在RedOrGreenUIView上执行一个RedOrGreenUIView,它位于TransparentUIView下面。我不能全身心地去完成这件事。请帮帮忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-17 19:30:44

如果一个UIView被触摸,下面的其他人就不会得到任何东西。

因此,您可以有一个中央类传递给您的UIView对象,或者第一个UIView,它位于顶部,将其UITouch对象传递给底层的UIView,并执行hitTest。

票数 1
EN

Stack Overflow用户

发布于 2015-12-14 06:05:57

为容器创建一个自定义视图,当点不在合格子视图中时,重写pointInside: message以返回NO,如下所示:

代码语言:javascript
复制
@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版本

代码语言:javascript
复制
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
        }
    }
票数 11
EN

Stack Overflow用户

发布于 2017-12-15 11:19:52

Swift 4版本:

代码语言:javascript
复制
 override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        for subview in YourView.subviews as [UIView] {

            if !subview.isHidden && subview.alpha > 0 && subview.isUserInteractionEnabled && subview.point(inside:point, with: event) {
                return true
            }
        }

    return false
 }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29107849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档