2014-01-20 3 views
1

У меня есть несколько UIButton экземпляров внутри UIView, которые, в свою очередь, находятся внутри основного UIView приложения. То, что я пытаюсь получить, - это CGRect одного из кадров кнопок относительно окна.Получите границы UIView относительно окна?

Так, например, если мой внутренний взгляд на 50, 50 по отношению к основной точке зрения, то кнопка на 10, 10 внутри, что я хотел бы вернуться 60, 60.

Есть ли простой способ сделать это, без необходимости отслеживать родительские представления и добавлять их и т. Д.?

+0

- (CGRect) convertRect: (CGRect) Прямоугольник toView: (UIView *) вид; - (CGRect) convertRect: (CGRect) rect fromView: (UIView *) вид; – Mattias

+0

Спасибо, не могли бы вы привести мне пример того, как я буду использовать его? – Luke

ответ

2
UIView *parent = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)]; 
UIView *child = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 10, 10)]; 
[parent addSubview:child]; 
[self.view addSubview:parent]; 
NSLog(NSStringFromCGRect([self.view convertRect:child.frame fromView:child.superview])); 

Результат в журнале:

{{60, 60}, {10, 10}} 
0

Используйте функцию ниже.

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; 

CGPoint pt = [button convertPoint:CGPointMake(button.frame.origin.x, button.frame.origin.y) toView:yourWindow]; 
3

Вы можете преобразовать прямоугольник в системе координат, другую точку зрения, используя -[UIView convertRect:toView] и -[UIView convertRect:fromView:].

Так что, если у вас есть ссылка на ваш взгляд внешнего (может быть, если вы используете навигацию контроллер, который может быть в крайнем виде):

UIView *outerView = self.navigationController.view; 
UIView *innerView = self.myButton; 

CGRect buttonRect = [self.view convertRect:self.innerView.frame toView:outerView]; 

Есть также эквивалентны convertPoint: методы. Это действительно просто случай разработки тех представлений, которые вы хотите конвертировать из/в.

+0

Это дает мне действительно странные результаты. Указанная кнопка находится в '{162, 0}' в своем супервизоре, и этот супервизор находится в '{0, 355}' в главном представлении. Тем не менее, он дает мне '{324, 291}' как вывод 'convertRect'. Почему это может быть? – Luke

+0

Хм, это странно. Вы уверены, что передаете правильный супервизор в 'convertRect' /' convertPoint'? –

+0

Насколько я знаю, да. Это кнопка, внутри кнопки просмотра, внутри основного вида, и я вызываю 'CGPoint centerOfButtonInSuperview = [кнопка convertPoint: button.center toView: self.view];' – Luke

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