我在屏幕上有几个UIViews,它们都没有重叠,我想在屏幕上选择基于X / Y坐标的UIView(屏幕作为整个视图尺寸,因此iPhone 5的320x568)进行转换选定的UIView例如,在下图中,我想基于输入(40,40)
选择蓝色矩形,然后执行转换,例如将其颜色更改为红色。
谢谢!
答案 0 :(得分:4)
UIViews有一个tag
属性,可能是一种更容易实现所需内容的方法。
您可以在界面构建器中设置标记,也可以以编程方式设置它。
UIView* newView = [[UIView alloc] initWithFrame:CGRectMake(x,y,z,a)];
[newView setBackgroundColor:[UIColor blueColor]];
newView.tag = 1;
[self addSubview:newView];
稍后您可以通过在层次结构的更上方的视图上调用viewWithTag
方法来访问该视图,然后对其执行某些操作
[[self viewWithTag:1] setBackgroundColor:[UIColor redColor]];
虽然通过查询框架并对生成的坐标进行数学运算来定位视图并非不可能,但很可能标签会更好地为您提供服务。
答案 1 :(得分:4)
UIView实现了一个名为hitTest的方法:withEvent:(see docs here),它将回答包含给定点的视图层次结构中最深的视图。
像这样使用:
// in the view controller subclass
CGPoint point = CGPointMake(40.0, 40.0);
UIView *subviewContainingPoint = [self.view hitTest:point withEvent:nil];