Ios 如何通过点击测试确定UIView是否被遮挡或部分脱离屏幕?
我正在寻找一种方法来测试UIView是否(部分)被UIActionSheet、UIAlertView、HUD等遮挡,或者是否(部分)在滑动面板、UIScrollView等中脱离屏幕。。这需要是一个通用的解决方案,因为有太多的方法来模糊视图 我想到的是在UIView应该位于的关键点执行一些命中测试,并检查有多少(如果有的话)命中给定的UIView 示例:想象下图中没有手。我想在手指所在的位置执行一个程序化的命中测试。如果未返回Ios 如何通过点击测试确定UIView是否被遮挡或部分脱离屏幕?,ios,objective-c,ios7,uiview,Ios,Objective C,Ios7,Uiview,我正在寻找一种方法来测试UIView是否(部分)被UIActionSheet、UIAlertView、HUD等遮挡,或者是否(部分)在滑动面板、UIScrollView等中脱离屏幕。。这需要是一个通用的解决方案,因为有太多的方法来模糊视图 我想到的是在UIView应该位于的关键点执行一些命中测试,并检查有多少(如果有的话)命中给定的UIView 示例:想象下图中没有手。我想在手指所在的位置执行一个程序化的命中测试。如果未返回视图A.2,则该视图将被遮挡 我已经研究过了,但是如何通过编程执行命中
视图A.2
,则该视图将被遮挡
我已经研究过了,但是如何通过编程执行命中测试,并在没有物理触摸事件的情况下查看哪个UIView被命中
参考资料:
- 我找到了一个答案
首先,将要执行命中测试的视图坐标(让我们使用
UIView*testView
)转换为屏幕坐标
CGPoint screenOrigin =
[testView.superview convertPoint:testView.frame.origin
toView:nil];
接下来,制作两个测试命中点(例如,视图的左上角和右下角)。这是一个测试点的示例
CGPoint hitTestPoint = CGPointMake(30, screenOrigin.y + 30); // upper left
然后找到最上面的窗口*并在其上调用hitTest:withEvent:
。事件可以为零
UIView *hitTest = [mainWindow hitTest:hitTestPoint withEvent:nil];
然后检查hitTest
结果是否等于testView
:
if (testView && [testView isEqual:hitTest] /* && [testView isEqual:hitTest2] */) {
// The view is not obscured nor off the screen in a sliding panel
}
*找到最上面的窗口仍然很困难,但对于大多数人来说,这样做可能会奏效:
UIWindow *mainWindow = [[[UIApplication sharedApplication] windows] firstObject]