2011-08-01 2 views
2

iosでは、回転を処理するためにカスタムサブビューを移動するために、View Controllerのどこに最適ですか? (もちろん、これは自動サイズ設定フラグが役に立たない人に限られます)。ここでiosでは、回転を処理するためにサブビューを移動するView Controllerの適切な場所はどこですか?

は、私が試した次のような場所だし、問題のそれぞれが持っている:

  • willAnimateRotationToInterfaceOrientation:期間

これは動作し、あなたが作る任意のサブビュー枠の変更はデバイスとしてうまくアニメーション化されますが風景は回転します< - >肖像画。ただし、タブコントローラーを使用している場合は、別のVCが表示されても呼び出されません。したがって、回転してこのタブに戻った場合、間違ったレイアウトになります。これが呼び出されるので、あなたがすることはできませんので、回転が有効になるので、self.view.frameにアクセスするときは、回転前のサイジングを取得する前にviewWillAppear

は本当に、助けにはならない

  • 私たちは風景や肖像画のために行っているかどうかを知る

    • viewDidAppear

    これはviewWillAppear、HOよりも優れていますビューが画面上に表示された後に呼び出されるために威力を発揮します。

    私はちょうど適切な場所が、両方のレイアウトを処理するうまく、私のビューコントローラのサブビューを配置して自分のコードを配置することを知りたい、うまくアニメーション。 THANKSすべて

答えて

4

私は通常、(あなたが言及素敵なアニメーションを取得する)willAnimateRotationToInterfaceOrientation:durationから、私は両方の呼び出し自分layoutViewsForOrientation:(UIInterfaceOrientation)方法を持っており、それが表示される前に私の見解を設定する(self.interfaceOrientationと)私のviewWillAppear:から。

答えは、何か変更があり、正しい向きになっているかどうかわからないときにビューをレイアウトする適切な場所で、レイアウト機能を使用してコードをきれいに保つことができます。

+0

私は何をしたかのように聞こえますが、viewDidAppearからも呼び出すと、回転のエッジの場合を処理し、タブは表示されません – Chris

2

ここでの問題は、UIViewControllerが表示されていないと回転しないということです。 UIViewController(A、B、C)の3つのタブがあります。あなたがAにいて回転している場合、BとCは回転しません。私はこれをUIViewController(AとBとC)のUIViewController()への参照があるので、UIViewController(AとBとC)の参照を持ってUITabBarControllerを保持するように、これを解決したので、UIViewController 。私のために非常にうまく動作します。 :)

+0

私はこの問題を抱える唯一の人ではないことを嬉しく思います。残念ながら、すべての状況を自動サイズ変更フラグで処理できるわけではないので、UIKitでの省略のようです。 – Chris

+0

私はChrisの自動サイズ調整を使用していません、私はコードの変更を行います。 – Peres

0

私が個人的に思いついたのは、あらゆるイベントをつかむことですが、うまくいくようですが、これを行うためのよりよい方法が必要であり、私は何か間違っていると心配しています。

- (void)doMyResizing { 
    self.somesubview.frame = ... 
} 
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    [self doMyResizing]; 
} 
- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self doMyResizing]; // This is for the case when the person uses this tab in portrait, changes to another tab, rotates to landscape, and switches back to this tab 
} 
- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self doMyResizing]; // This is for the case when the person uses this tab in portrait, changes to another tab, rotates to landscape, and switches back to this tab 
} 
関連する問題