2015-10-16 8 views
1

Я пытаюсь понять, как вид реагирует на его границы, которые изменяются. Если я изменю начало координат в представлении, изменит ли он исходное положение кадра?Изменение границ вида влияет на кадр

E.g.

UIView *greenView = [[UIView alloc] initWithFrame:CGRectMake(150, 150, 150, 200)]; 
greenView.backgroundColor = [UIColor colorWithRed:0.494 green:0.827 
              blue:0.129 alpha:1]; 
[self.view addSubview:greenView]; 
greenView.bounds = CGRectMake(0, 150, greenView.bounds.size.width, greenView.bounds.size.height); 

Не может ли это изменить исходный код кадра (150, 300)? Выполнение приведенного выше кода, похоже, не изменяет его фрейм. (Я знаю, что вы не должны менять позицию взглядов с помощью границ, это просто гипотетическое).

+0

Это большой вопрос. Почему бы не запустить его, установить Brakpoint и посмотреть? –

+0

Спасибо! Я запустил его, но рамка не изменилась, просто хотелось убедиться, правильно ли я понял концепцию. – Smashkon

ответ

4

Per Apple Documentation, вот связь между представлением в рамы, рамки и центра:

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

  • при установке свойства кадра, значение размера в изменении границ собственности в соответствии с новым размером кадра прямоугольника. Значение
    Значение в центре похоже на эту страницу аналогично новому
    центральная точка прямоугольника рамки.
  • Когда вы устанавливаете свойство центра, значение начала в кадре изменяется соответствующим образом.
  • Когда вы задаете размер свойства bounds, значение размера в свойстве frame изменяется в соответствии с новым размером прямоугольника границ.

Таким образом, ответ на ваш вопрос, изменение X, Y позиции на границах Посмотреть должен не влияет на кадр. Большая часть случаев начинается с (0,0). Изменение высоты или ширины на отрицательные значения позволило бы происхождение границ идти отрицательно.

EDIT: Ответ на вопрос OP - Нет, изменение положения границ никак не повлияет на кадр. Поскольку границы относятся к собственной системе координат зрения, изменение X, Y в системе самоопределения не изменило бы положение в системе координат супервизора.

Вы можете попробовать с помощью двух пользовательских представлений, как это:

UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 100.0f, 150.0f, 150.0f)]; 
view1.backgroundColor = [UIColor redColor]; 

NSLog(@"view1.bounds = %@", NSStringFromCGRect(view1.bounds)); 
NSLog(@"view1.frame = %@", NSStringFromCGRect(view1.frame)); 

UIView* view2 = [[UIView alloc] initWithFrame:CGRectInset(view1.bounds, 20.0f, 20.0f)]; 
view2.backgroundColor = [UIColor yellowColor]; 

NSLog(@"view2.bounds = %@", NSStringFromCGRect(view2.bounds)); 
NSLog(@"view2.frame = %@", NSStringFromCGRect(view2.frame)); 

NSLog(@"view1.bounds = %@", NSStringFromCGRect(view1.bounds)); 
NSLog(@"view1.frame = %@", NSStringFromCGRect(view1.frame)); 

NSLog(@"view2.bounds = %@", NSStringFromCGRect(view2.bounds)); 
NSLog(@"view2.frame = %@", NSStringFromCGRect(view2.frame)); 

[view1 addSubview:view2]; 

А затем изменить подвид связанный, как это:

CGRect frame = view2.bounds; 
frame.origin.x += 20.0f; 
frame.origin.y += 20.0f; 
view2.bounds = frame; 

Изменение границ не будет влиять на кадр вообще. И оба мнения будут выглядеть одинаково на экране:

enter image description hereenter image description here

И, наконец, попробовать, изменив границы родительского вида, чтобы увидеть внизу экрана:

CGRect frame = view1.bounds; 
frame.origin.x += 20.0f; 
frame.origin.y += 20.0f; 
view1.bounds = frame; 

enter image description here

+0

Спасибо за ваш ответ, однако, если я переместил позицию прямоугольника вниз в свою собственную систему координат, не изменилось бы и его положение в системе координат superviews? – Smashkon

+0

что смотреть в поворотном состоянии? – Alwin