我在应用程序窗口的坐标中有一个点CGPoint 有没有办法在该点获得指向视图的指针?
E.g。我有100个视图或随机大小,并放置在随机位置 - 一些部分/完全覆盖彼此。
按应用程序中的按钮将列出在(0,0),(100,100)和(200,200)处可见的视图的地址。
视图可能启用也可能没有启用userInteraction
另外,完全透明的视图覆盖视图的更复杂的情况呢?
答案 0 :(得分:7)
<强>更新强>
hitTest
无效,因为如果父级userInteractionEnabled
设置为NO
或视图超出其父级边界,则不会为您提供子树。
visibleViewAtPoint
如下所述将解析整个视图树并为视图提供最高的子视图索引。这应该给出正确的视图(不考虑z顺序......)
- (void) findView:(UIView**)visibleView atPoint:(CGPoint)pt fromParent:(UIView*)parentView
{
UIView *applicationWindowView = [[[[UIApplication sharedApplication] keyWindow] rootViewController] view];
if(parentView == nil) {
parentView = applicationWindowView;
}
for(UIView *view in parentView.subviews)
{
if((view.superview != nil) && (view.hidden == NO) && (view.alpha > 0))
{
CGPoint pointInView = [applicationWindowView convertPoint:pt toView:view];
if([view pointInside:pointInView withEvent:nil]) {
*visibleView = view;
}
[self findView:visibleView atPoint:pt fromParent:view];
}
}
}
- (UIView*) visibleViewAtPoint:(CGPoint)pt
{
UIView *visibleView = nil;
[self findView:&visibleView atPoint:pt fromParent:nil];
return visibleView;
}