UIWindow触控穿透的问题

想问一下各位是如何解决UIWindow穿透的问题的

我在SP开了一个新的UIWindow

如果把它的isUserInteractionEnable关掉了 把它hitTest返回nil了 没法穿下去

如果手动遍历SP的UIWindow并且一层一层寻找responder的话 触控的位置会向上漂移大概半个桌面图标(iPad横屏)应用内没法穿透

想问一下各位是怎么处理的

UIWindows 中 ViewController 的 View 有没有设置 userInteractionEnabled == NO?
我之前也有这个需求,主要是想做一个 Logger,把 daemon 的日志打出来,我把 UIWindow 和 Window 里面的 View 的 userInteractionEnabled 全改成 NO,触控事件可以正常穿透下去。

我里面没有放uiviewcontroller。。。。。回头试试放一个

楼主想实现什么功能? 是在SpringBoard上添加一个UIWindow,当触摸在这个Window的特定区域的时候,时间不往下传递,触摸其他区域事件继续往下传递?

就是点击到这个window上的时候假装这个window不存在!

当然我希望是能够捕捉到这个event并且表现出这个window不存在的效果

在你控制器里加上这个方法可以实现类似微信悬浮窗的功能
-(BOOL)isShouldReceiveTouch:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(CGRectInset(self.floatingView.frame, 0, 0), point)) {
return YES;
}else{
return NO;
}
}

题主是想直接自己放UIWindow,没有控制器的,而且UIWindow好像就是没有控制器的,又不是什么UIViewController

大概是自定义一个 window,level 设置最高放个 vc?我的日志输出就是这么做的…

我这里是没放vc的window 因为似乎不需要vc

不过也许正是因为没有vc造成了一些问题 日后试一试

window的话用这个方法

  • (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
1 Like

找时间我试一下 谢谢

https://iphonedevwiki.net/index.php/Backboardd

BackBoard is responsible for deciding what application should receive the touch events that come in from IOKit. When a digitizer event is received, BackBoard calls the -contextIdAtPosition: method of the current CAWindowDisplayServer to get the context ID which the touch should be sent to. This is how it decides the process that should receive the touch.

1 Like