2012-02-19 12 views
2

この状況でAutolayoutが役立つかどうか尋ねる編集?固定位置のUILabelを回転する

私のUILabelは画面上の固定位置を維持したまま、まだ回転させることができますか? shouldAutorotateToInterfaceOrientationはYESを返していますが、ラベルは回転していますが、ラベルの位置が変化するXcodeでは、ストラットにバネを設定しても問題ありません。

最初の画像は、4つの個別のUILabelsを使用して、どのようにレイアウトをストーリーボードに作成したかを示しています。 2番目の画像は、風景がどのように表示されるかを示しています。 3番目の画像は、ランドスケープをどのように見たいかを示しています。各番号の回転アニメーションは、数値自体を中心にしています。

This is how I've created the layout in storyboard, with four individual UILabels. This is how landscape appears -- not what I want. Here is what I would like landscape to look, with the rotation animation of each number centered on the number itself.

+0

ポストそれはやっているものの写真やあなたがそれをやりたいの実装: はこれを行うには、のviewDidLoadに配置する必要があります。 –

+0

あなたはそれを手動で行う必要があることを確かめてください(回転)。あなたは、あなたが望む効果を得るためにストラット/スプリングを使用することはできません。 – gamozzii

答えて

3

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

ビューをwillAnimateRotationToInterfaceOrientation:duration:にレイアウトする必要があります。 the documentation状態として:このメソッドが呼び出される時まで

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

さらにアニメーションこのメソッドの新しい位置にビューを設定することもできます。

1

あなたは、ラベル(transformatin)に回転を行うことができshouldAutorotateToInterfaceOrientation方法で手動

2

をラベルの枠の位置の値を設定する必要があります。 uiviewcontrollerのインターフェース指向方法からdidrotateにしてください。

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

1

2つのUILabelsを水平方向に1つ、垂直方向に2つ作成します。向きを変更するときに必要なラベルを非表示にして表示します。

[[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 
     } 
     .... 
}