CGAffineTransformMakeRotation移动UILabel

时间:2013-04-08 12:22:09

标签: ios objective-c

我正在使用最新的SDK开发iOS 5.0+应用程序。

我有一个自定义UIView(带有自定义xib)和四个UILabel,我想用这段代码将它们旋转90度:

- (void)layoutSubviews
{
    [self rotateToLandscape];
}

- (void)rotateToLandscape
{
    NSLog(@"Label 1: %@", NSStringFromCGRect(self.label1.frame));
    NSLog(@"Label 2: %@", NSStringFromCGRect(self.label2.frame));
    NSLog(@"Label 3: %@", NSStringFromCGRect(self.label3.frame));
    NSLog(@"Label 4: %@", NSStringFromCGRect(self.label4.frame));

    self.label1.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 1: %@", NSStringFromCGRect(self.label1.frame));
    self.label2.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 2: %@", NSStringFromCGRect(self.label2.frame));
    self.label3.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 3: %@", NSStringFromCGRect(self.label3.frame));
    self.label4.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 4: %@", NSStringFromCGRect(self.label4.frame));
}

但是,我不是为什么,都占据同一个位置。

这是我得到的日志:

Label 1: {{15, 0}, {71, 21}}
Label 2: {{15, 29}, {71, 21}}
Label 3: {{15, 58}, {71, 21}}
Label 4: {{15, 78}, {71, 21}}
Label 1: {{40, -25}, {21, 71}}
Label 2: {{40, 4}, {21, 71}}
Label 3: {{40, 33}, {21, 71}}
Label 4: {{40, 53}, {21, 71}}

我读到我必须从中心(或从左上角)旋转UILabel,但我不知道该怎么做。

这就是我得到的:

enter image description here

并且,如果我显示要记录的中心:

- (void)rotateToLandscape
{
    NSLog(@"Label 1: %@", NSStringFromCGPoint(self.label1.center));
    NSLog(@"Label 2: %@", NSStringFromCGPoint(self.label2.center));
    NSLog(@"Label 3: %@", NSStringFromCGPoint(self.label3.center));
    NSLog(@"Label 4: %@", NSStringFromCGPoint(self.label4.center));

    self.label1.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 1: %@", NSStringFromCGPoint(self.label1.center));
    self.label2.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 2: %@", NSStringFromCGPoint(self.label2.center));
    self.label3.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 3: %@", NSStringFromCGPoint(self.label3.center));
    self.label4.transform = CGAffineTransformMakeRotation(M_PI/2);
    NSLog(@"Label 4: %@", NSStringFromCGPoint(self.label4.center));
}

我得到这个日志:

Label 1: {50.5, 10.5}
Label 2: {50.5, 39.5}
Label 3: {50.5, 68.5}
Label 4: {50.5, 88.5}
Label 1: {50.5, 10.5}
Label 2: {50.5, 39.5}
Label 3: {50.5, 68.5}
Label 4: {50.5, 88.5}

没有轮换:

enter image description here

这些标签位于UIView内部,我认为我必须旋转该父视图,而不是旋转每个UILabel

有什么建议吗?我必须在轮换后移动每个UILabel吗?

2 个答案:

答案 0 :(得分:3)

您应该尝试查看frame属性的文档。

  

警告:如果transform属性不是标识转换,则此属性的值未定义,因此应忽略。

这意味着在应用旋转变换后打印的帧值可能是任何值。不要依赖那个价值。如果您想知道标签的位置,可以查看center属性。

默认情况下,所有视图都围绕中心旋转。您可以使用the anchor point更改它。

答案 1 :(得分:1)

我的解决方案:

我必须旋转父UILabel

,而不是轮换每个UIView
- (void)rotateToLandscape
{
    self.transform = CGAffineTransformMakeRotation(M_PI/2);
}