2013-10-28 6 views
1

У меня на экране несколько UIViews, ни одна из них не перекрывается, и я хотел бы выбрать UIView на основе координат X/Y на экране (экран как весь вид размер 320x568 для iPhone 5), чтобы сделать преобразование в выбранный UIView. Например, на изображении ниже я хотел бы выбрать прямоугольник синий на основе ввода (40,40), а затем выполнить преобразование, например, изменить его цвет на красный.Как выбрать UIView на экране, основанном на координате X/Y

enter image description here

Спасибо!

+0

выберите на ощупь? –

ответ

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]; 
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]]; 

Хотя это не невозможно найти свою точку зрения, запрашивая их кадры и выполнение некоторой математики по результирующим координатам, очень хорошие шансы, что теги будут служить вам лучше.

Смежные вопросы