从 iOS 中的 x,y 查找对象
FInd the object from x,y in iOS
当 iOS 中给出 (x,y) 坐标时,如何找到 window 中存在哪个 UI 元素?我将拥有一个包含许多 UI 元素的视图控制器,我将获得 x,y,我必须使用它来找到视图中存在的元素。
一个视图在给定 CGPoint
处可能有多个视图。此方法应该 return 在给定点存在的数组子视图。
-(NSArray*)viewsAtPoint:(CGPoint)point inView:(UIView*)view {
NSArray *subviews = view.subviews;
NSMutableArray *mutableArray = [[NSMutableArray alloc]init];
for(UIView *subview in subviews) {
CGPoint thisSubviewPoint = subview.frame.origin;
if(thisSubviewPoint.x == point.x && thisSubviewPoint.y == point.y) {
[mutableArray addObject:subview];
}
}
return mutableArray;
}
要获取特定点的视图列表,您可以使用,
-(NSArray*)subviewsAtPoint:(CGPoint)point inView:(UIView*)view {
NSMutableArray *viewsAtPoint = [[NSMutableArray alloc]init];
for(UIView *subview in view.subviews) {
if(CGRectContainsPoint(subview.frame, point))
[viewsAtPoint addObject:subview];
}
return viewsAtPoint;
}
要获取特定点的最顶层视图,您可以使用
-(UIView *)topmostViewAtPoint:(CGPoint)point inView:(UIView*)view {
for(UIView *subview in view.subviews.reverseObjectEnumerator) {
if(CGRectContainsPoint(subview.frame, point))
return subview;
}
return view;
}
以上代码假设只有一层子视图,没有嵌套子视图。
如果你有嵌套的子视图,你可以定义一个递归函数来找到最顶层的视图。
-(UIView *)topmostViewAtPoint:(CGPoint)point inView:(UIView*)view {
for(UIView *subview in view.subviews.reverseObjectEnumerator) {
if(CGRectContainsPoint(subview.frame, point))
{
CGPoint innerPoint = [self.view convertPoint:point toView:subview];
[self topmostViewAtPoint:innerPoint inView:subview];
}
}
return view;
}
当 iOS 中给出 (x,y) 坐标时,如何找到 window 中存在哪个 UI 元素?我将拥有一个包含许多 UI 元素的视图控制器,我将获得 x,y,我必须使用它来找到视图中存在的元素。
一个视图在给定 CGPoint
处可能有多个视图。此方法应该 return 在给定点存在的数组子视图。
-(NSArray*)viewsAtPoint:(CGPoint)point inView:(UIView*)view {
NSArray *subviews = view.subviews;
NSMutableArray *mutableArray = [[NSMutableArray alloc]init];
for(UIView *subview in subviews) {
CGPoint thisSubviewPoint = subview.frame.origin;
if(thisSubviewPoint.x == point.x && thisSubviewPoint.y == point.y) {
[mutableArray addObject:subview];
}
}
return mutableArray;
}
要获取特定点的视图列表,您可以使用,
-(NSArray*)subviewsAtPoint:(CGPoint)point inView:(UIView*)view {
NSMutableArray *viewsAtPoint = [[NSMutableArray alloc]init];
for(UIView *subview in view.subviews) {
if(CGRectContainsPoint(subview.frame, point))
[viewsAtPoint addObject:subview];
}
return viewsAtPoint;
}
要获取特定点的最顶层视图,您可以使用
-(UIView *)topmostViewAtPoint:(CGPoint)point inView:(UIView*)view {
for(UIView *subview in view.subviews.reverseObjectEnumerator) {
if(CGRectContainsPoint(subview.frame, point))
return subview;
}
return view;
}
以上代码假设只有一层子视图,没有嵌套子视图。
如果你有嵌套的子视图,你可以定义一个递归函数来找到最顶层的视图。
-(UIView *)topmostViewAtPoint:(CGPoint)point inView:(UIView*)view {
for(UIView *subview in view.subviews.reverseObjectEnumerator) {
if(CGRectContainsPoint(subview.frame, point))
{
CGPoint innerPoint = [self.view convertPoint:point toView:subview];
[self topmostViewAtPoint:innerPoint inView:subview];
}
}
return view;
}