2011-02-02 18 views
0

向きを変えて瞬時に画面の回転を取得したい。私のViewControllerにはUIImageとUILabelがあります。次のように私が行いますiPhone:画面が回転してからアプリケーションがクラッシュする

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
[self willRotateToInterfaceOrientation:[self interfaceOrientation] duration:0]; 
} 

ラインアプリがクラッシュしませんがなけれ:コードの行が回転が終了した後にゼロアプリがクラッシュ右に期間を設定しようとすると

[self willRotateToInterfaceOrientation:[self interfaceOrientation] duration:0]; 

を。

私が間違っていることを知っていますか?

ありがとうございます。

答えて

1

多くのwillRotateToInterfaceOrientationをスタックしています:duration:次々に呼び出します。 最初にメソッドが呼び出されたとき、それは再び呼び出され、再び呼び出され、クラッシュするまで再び呼び出されます。 パディングの継続時間:0は何も意味しません。つまり、回転エフェクトに使用されるCoreAnimationのタイミングは、実行ループとは別のスレッドで実行されるため、このようにスタッキングコールを停止することはできません。 アプリが回転した後にクラッシュする理由は、スタックがアニメーションが既に開始されている間に別のスレッドが開始されたためです。

自動回転を無効にし、UIDeviceOrientationDidChangeNotification通知を観察して適切なビュー変換を適用するだけで、すぐに向きを取得できます。

+0

それは動作します。ありがとう! – TxabiGG

1

あなたは無限ループを作成している:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    [self willRotateToInterfaceOrientation:[self interfaceOrientation] duration:0]; 
    } 

あなたは自分自身の中から同じ機能を呼び出しています。あなたは何を目指していますか?

+0

私は、画面が回転しているときにアニメーションを避けようとしています。だから、私はdurationを0に設定しようとしています。しかし、無限ループだと指摘しているので、willRotateToInterfaceOrientationメソッドがduration = 0で呼び出されるようになりますか? – TxabiGG

関連する問題