2013-04-08 63 views
1

我正在开发iOS 5.0+应用程序与最新的SDK。CGAffineTransformMakeRotation移动UILabel

我有一个自定义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吗?

回答

1

我的解决办法:

相反旋转每个UILabel我有旋转父UIView的:

- (void)rotateToLandscape 
{ 
    self.transform = CGAffineTransformMakeRotation(M_PI/2); 
} 
3

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

警告:如果transform属性不是恒等变换,这个属性的值是不确定的,因此应被忽略。

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

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

+0

谢谢您的回答。正如你所看到的,在这方面很新颖,你知道是否有一个例子可以让我学习如何做到这一点?谢谢。 – VansFannel 2013-04-08 17:14:10

+1

@VansFannel **什么是“它”?旋转转角?你的代码中的方法称为'rotateToLandscape',但你不应该自己做,只需配置视图控制器以允许横向和纵向。 – 2013-04-08 19:26:06

+0

谢谢,但这不能回答我的问题。 – VansFannel 2013-04-08 19:41:06