为什么视图在旋转M_PI * 0.25后消失(但不是M_PI * 0.26)

时间:2014-03-18 09:49:02

标签: ios debugging ios7 uiview rotation

我试图回答这个关于view.frame和view.bounds:

之间差异的问题

我写过:

- (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);

dissapeared!但仍然报告它的框架和边界值(相当恰当)。

最有趣的部分是如果我改变了旋转角度:

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

它可以正常工作。视图不再消失!

我在设备上测试了它,就像在模拟器中一样:

以下是视频,在模拟器中测试:

http://youtu.be/O6aYRt_4xsE

PS:

它看起来像个臭虫。

编辑:

看起来这种行为(错误?)是由Autolayout机制引起的。

您可以通过单击您的故事板文件将其关闭,并且在Xcode右侧应该有选项卡 “显示文件检查器”并取消选中此框:

Autolayout

以下是视频证明这实际上是Autolayout的问题:

http://youtu.be/HbFRlXtiZ-g

但这仍然没有回答这个问题。

1 个答案:

答案 0 :(得分:0)

据我所知,使用“经典”方法来改变受自动布局限制的视图层次结构内容的结果或多或少是未定义的。

所以这实际上并不是一个错误。如果要以编程方式更改布局,则需要执行的操作是将更改转换为自动布局约束的更改。这可以通过将translatesAutoresizingMaskIntoConstraints设置为YES来自动完成。

请同时查看this SO Question