2

Autolayoutがこの状況で役立つかどうかを尋ねるために編集しますか?

UILabelを画面上の固定位置に維持しながら、回転させるにはどうすればよいですか?shouldAutorotateToInterfaceOrientationはYESを返し、ラベルは正常に回転していますが、Xcodeで支柱をどのように設定しても、ラベルの位置が変わります。

最初の画像は、4つの個別のUILabelを使用して、ストーリーボードでレイアウトを作成した方法を示しています。2番目の画像は、風景がどのように表示されるかを示しています。私が望むものではありません。3番目の画像は、数字自体を中心とした各数字の回転アニメーションで、風景をどのように見せたいかを示しています。

これが、4つの個別のUILabelを使用してストーリーボードでレイアウトを作成した方法です。 これは風景がどのように見えるかです-私が望むものではありません。 これが私が風景に見せたいものです。各数字の回転アニメーションは数字自体を中心にしています。

4

4 に答える 4

3

vrk は彼の答えで正しい軌道に乗っていshouldAutorotateToInterfaceOrientation:ますが、ラベルをレイアウトする正しい方法ではありません。を受け取ったshouldAutorotateToInterfaceOrientation:時点では、新しいオリエンテーション用にまだ何も更新されていません。

でビューをレイアウトする必要がありますwillAnimateRotationToInterfaceOrientation:duration:ドキュメントに記載されているように:

このメソッドが呼び出されるまでに、interfaceOrientationプロパティは既に新しい方向に設定されており、ビューの境界が変更されています。したがって、このメソッドでビューに必要な追加のレイアウトを実行できます。

この方法では、ビューを新しい位置にアニメーション化することもできます。

于 2012-02-19T07:24:34.883 に答える
2

ラベルで回転を実行できます(変換)。uiviewcontroller の didrotatefrom interfaceorientation メソッドでそれを行います。

uilabel.transform=CGAffineTransformMakeRotation(M_PI / -4); このような。4 つの方向すべてでこれを実行します。そして、デバイスの向き以外に appdelegate からステータスバーの向きを取得することが 1 つあります。ビューの向きとの同期を保つのに役立ちます。

于 2012-02-19T07:03:32.750 に答える
1

shouldAutorotateToInterfaceOrientation メソッドでラベルのフレーム位置の値を手動で設定する必要があります

于 2012-02-19T06:29:20.603 に答える
1

水平方向と垂直方向の 2 つの UILabels を作成します。向きを変更するときに、必要なラベルを表示または非表示にします。これを行うには、viewDidLoad を配置する必要があります。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

実装する

- (void) didRotate:(NSNotification *)notification{

       UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

       if (orientation == UIDeviceOrientationLandscapeLeft)
       {

          // show Horizontal Label
       }
       ....
}
于 2012-02-19T09:01:34.157 に答える