2013-05-29 11 views
10

ここでは奇妙な問題に直面しています。私は[UIView setAnimationsEnabled:NO];
を使用して、私のビューコントローラでの姿勢変更時のアニメーションを無効にする。しかし、アラートビューが存在していると私は方向を変更した場合、それは奇妙な結果を与えているのです何らかの理由でUIAlertViewが存在するときにアニメーションが表示されない場合の方向性

添付のスクリーンショットは、向きを横向きに変更したものです。

landscape mode

ご注意:私は標準UIAlertViewを使用しています、それはアラートビューが存在し、ここでの関与なしのカスタマイズが存在しないときに表示されるデフォルトのオーバーレイです。 documentation

If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.

あたりとして

だから、デフォルトのオーバーレイのサイズ変更に影響を与えるべきではありません。 Is it a restriction in disabling animation !??

なぜこのようになっているのか分かりません。 誰でもこれを解決するのを手伝ってもらえますか?

+0

だから、まず右、 'UIAlertView'を表示して、デバイスを回転させていますか?または回転中にそれを表示する? –

+0

私は 'UIAlertView'を表示して、デバイスを回転しています。 –

+0

'UIAlertView'が表示されているとき、私が覚えている限り、回転は自動的に無効になるので、むしろ奇妙です。 –

答えて

0

これはiOS6、以下のバグのようですし、iOS7に固定されています。

iOS alert view without animation

4

[UIView setAnimationsEnabled:NO];を設定すると、UIAlertViewはオーバーレイビューのサイズが変更されません(バグだと思います)。

アラートビューが画面に表示されているときは、次のように方向を制限することができます(オプション)。

BOOL変数を.hファイルに作成します。

BOOL shouldRotate; 

viewDidloadYESでそれを初期化します。

そして、あなたはその時点で警告表示したときにshouldRotate = NO;

を作成し、次のようにUIAlertViewデリゲートを実装:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    shouldRotate = YES; 
} 

希望がお手伝いします。

編集:あなたは何のアニメーションと回転の両方を望んでいないとアラートビューと

これは、実際にハックですが、働く、

alertは.hファイルで宣言されUIAlertViewのオブジェクトです。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) { 
     UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; 
     imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); 
    } 
    else{ 
     UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; 
     imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0); 
    } 
} 
+0

あなたの答えをありがとう、私はこの選択肢を知っていますが、私は両方を与える必要があるので、私はこれを使用することはできません。 –

+1

実際、UIAlertViewは変換アニメーション(UIAlertViewの私のデバッグに従って)を持つオーバーレイビューを管理し、UIViewのアニメーションを無効にするとこのパートは実行されず、オーバーレイビューは必要に応じてサイズ変更されません。 – Yuvrajsinh

+0

@prasaddevadiga私は自分の答えを編集したので、あなたの問題を解決するはずです。 – Yuvrajsinh

3

このバグに対処するもう1つの方法は、回転前にプログラムで警告ビューを閉じ、回転が完了した後に新しい警告を表示することです。

これは、画面サイズに関係なく、すべてのiOSデバイスで自動的に機能します。

関連する問題