Iphone 在某一点获得可见视图
我在应用程序窗口的坐标中有一个点。Iphone 在某一点获得可见视图,iphone,ipad,uiview,Iphone,Ipad,Uiview,我在应用程序窗口的坐标中有一个点。 有没有一种方法可以使视图指针在该点可见 例如,我有100个视图或随机尺寸,并放置在随机位置-一些部分/完全相互覆盖 按下应用程序中的按钮将列出在(0,0)、(100100)和(200200)处可见的视图地址。 视图可能启用用户交互,也可能未启用用户交互。 另外,如果视图被完全透明的视图覆盖,那么更复杂的场景又如何呢?更新了 hitTest将不起作用,因为它不会为父级已将userInteractionEnabled设置为NO的子树或超出父级界限的视图提供子树 v
有没有一种方法可以使视图指针在该点可见 例如,我有100个视图或随机尺寸,并放置在随机位置-一些部分/完全相互覆盖
按下应用程序中的按钮将列出在(0,0)、(100100)和(200200)处可见的视图地址。
视图可能启用用户交互,也可能未启用用户交互。
另外,如果视图被完全透明的视图覆盖,那么更复杂的场景又如何呢?更新了
hitTest
将不起作用,因为它不会为父级已将userInteractionEnabled
设置为NO
的子树或超出父级界限的视图提供子树
visibleViewAtPoint
将解析整个视图树,并给出具有最高子视图索引的视图。这应该给出正确的视图(不考虑z顺序…)
更新
hitTest
将不起作用,因为它不会为父级已将userInteractionEnabled
设置为NO
的子树或超出父级界限的视图提供子树
visibleViewAtPoint
将解析整个视图树,并给出具有最高子视图索引的视图。这应该给出正确的视图(不考虑z顺序…)
目前,此代码未检测到UIAlertView或其他“弹出”视图,如点击UIWebView中的下拉列表后显示的UIPickerView。这是该代码可以修改来完成的事情,还是属于“视图超出其父边界”的情况?如果是后者,您还可以如何检测和检索此类视图?UIAlertView维护自己的UIScreen,它将位于视图控制器视图之外,因此此方法不适用于此。您可能需要(以某种方式)跟踪UIAlertView的屏幕并在那里执行此方法。目前,此代码未检测到UIAlertView或其他“弹出”视图,如点击UIWebView中的下拉列表后显示的UIPickerView。这是该代码可以修改来完成的事情,还是属于“视图超出其父边界”的情况?如果是后者,您还可以如何检测和检索此类视图?UIAlertView维护自己的UIScreen,它将位于视图控制器视图之外,因此此方法不适用于此。您可能需要(以某种方式)跟踪UIAlertView的屏幕并在那里执行此方法。
- (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;
}