我有一个UIWindow,windowLevel设置为UIWindowLevelStatusBar + 1。此窗口具有一个阻止状态栏的半透明视图。我有时需要将视图中的触摸事件传递给状态栏。有什么想法吗?
答案 0 :(得分:4)
因此,似乎可以通过UIWindow重写hitTest:withEvent:
的自定义子类来手动检测子视图中的触摸,并且始终返回nil。
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if ([event type]==UIEventTypeTouches) {
UIView *v=[super hitTest:point withEvent:event];
if (customSubViewthatCoversStatusBarOnly==v)
//doLotsOfCoolStuff
}
return nil;
}
状态栏可识别所有触摸,因此滚动到顶部,返回呼叫,VoiceOver等没有破损。我仍然可以拦截状态栏上的水龙头。
我刚刚把它搞砸了。我可能会在本周晚些时候向App Store上传一个更新版本的更新版本,看看苹果会做多少抱怨。
编辑 - 4月7日:答案 1 :(得分:2)
您可能会在github上找到此组件。
否则,Cocoa with Love博客文章可能对阅读非常有用。
答案 2 :(得分:1)
据我了解,您应该使用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
来实现该行为。基本上,如果你想要处理触摸事件,你可以返回自己,或者[super hitTest:point withEvent:event]
让状态栏处理触摸事件。
查看UIView Class Reference了解更多信息。
编辑:正如乔纳森所说,苹果可能不赞成这一点。