2014-03-18 1 views
1

Я попытался ответить на этот вопрос, который о разнице между view.frame и view.bounds:Почему вид исчезает после поворота M_PI * 0,25 (но не M_PI * 0,26)

я написал это:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    // Do any additional setup after loading the view, typically from a nib. 

    [self showPropertiesOfLabel]; 

    self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.25); 

    [self showPropertiesOfLabel]; 
} 

- (void) showPropertiesOfLabel { 
    NSLog(@"bounds.origin.x: %f", self.label.bounds.origin.x); 
    NSLog(@"bounds.origin.y: %f", self.label.bounds.origin.x); 
    NSLog(@"bounds.size.width : %f", self.label.bounds.size.width); 
    NSLog(@"bounds.size.height: %f", self.label.bounds.size.height); 


    NSLog(@"frame.origin.x : %f", self.label.frame.origin.x); 
    NSLog(@"frame.origin.y : %f", self.label.frame.origin.y); 

    NSLog(@"frame.size.width : %f", self.label.frame.size.width); 
    NSLog(@"frame.size.width : %f", self.label.frame.size.height); 
} 

Но что погладил меня был тот факт, что моя точка зрения, что я назвал «ярлык» после того, как

self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.25); 

исчез! Но все же сообщается о его значениях фрейма и границ (а точнее, соответственно).

Самое интересное заключается в том, что если я изменил угол поворота:

self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.26); 

Он работает как положено. Вид больше не исчезает!

Я испытание это и на устройстве, как в тренажере:

Вот видео этого, тестирование в тренажере:

http://youtu.be/O6aYRt_4xsE

PS:

Это выглядит для меня, как ошибка.

EDIT: (? Ошибка)

Похоже, что это поведение вызвано механизмами Autolayout.

Вы можете отключить его, нажав на файл раскадровки и справа от Xcode должна быть вкладка «Показать файл инспектор» и снимите этот флажок:

Autolayout

Вот видео доказывание что это на самом деле проблема с Autolayout:

http://youtu.be/HbFRlXtiZ-g

Но это до сих пор не ответили на вопрос.

ответ

0

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

Так что это не ошибка. Что вам нужно сделать, если вы хотите изменить свой макет прогамматически, - это перевести ваши изменения в изменения ограничений автоопределения. Это можно сделать автоматически, установив translatesAutoresizingMaskIntoConstraints в YES.

Пожалуйста, смотрите также this SO Question!

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