1

最新の SDK を使用して iOS 5.0 以降のアプリを開発しています。

カスタムUIView(カスタム xib を使用) と fourUILabelがあり、次のコードでそれらを 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、その方法がわかりません。

これは私が得るものです:

ここに画像の説明を入力

そして、ログにセンターを表示すると:

- (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}

回転なし:

ここに画像の説明を入力

これらのラベルは の内側にあり、UIViewそれぞれを回転させるのではなく、その親ビューを回転させる必要があると思いますUILabel

何かアドバイス?UILabel回転後にそれぞれ移動する必要がありますか?

4

2 に答える 2

3

frameプロパティのドキュメントを参照してください。

警告:プロパティが恒等変換でない場合、transformこのプロパティの値は定義されていないため、無視する必要があります。

これは、回転変換を適用した後に印刷するフレーム値が、まったく何でもよいことを意味します。その値に依存しないでください。centerラベルの位置を知りたい場合は、プロパティを確認できます。

デフォルトでは、すべてのビュー中心を中心に回転します。アンカーポイントを使用して変更します。

于 2013-04-08T12:29:33.150 に答える
1

私の解決策:

それぞれを回転させる代わりに、UILabel親を回転させる必要がありますUIView:

- (void)rotateToLandscape
{
    self.transform = CGAffineTransformMakeRotation(M_PI/2);
}
于 2013-04-09T06:28:01.743 に答える