2

最初のビューでアプリケーションの正しい方向をどのように検出しますか?縦向きの画像と横向きの画像のどちらかを背景として表示できるようにするために知っておく必要があります。

[[UIDevice currentDevice] orientation]iPadを表面に平らに置いた場合、正しく動作しません。

statusBarOrientationロードされた最初のビューに対して正しい結果を返さないようです。でステータスバーの向きを取得しようとしましたがviewWillAppear、横向きの場合でもviewDidLoad両方とも縦向きになりました。

私は[self.window makeKeyAndVisible]自分の中にいることを確認しAppDelegate.mました- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions。これは、最初のViewControllerで誤ったステータスバーの向きを返すだけです。

注:私はまた、何があっても縦向きを返す広告を試しましinterfaceOrientationた。UIViewController

これを修正する方法はありますか?

編集:

私は[[UIDevice currentDevice] orientation]それが縦向きか横向きかを検出するためにを使用していますが、私の問題は、UIDeviceがフラット(縦向きまたは横向きではない)の向きを返した場合のビューが実際に何であるかを検出することです。

4

2 に答える 2

1

多くのアプリケーションでこの問題が発生します。デバイスがフラットの場合、どの方向も有効です。

最善の策は[[UIDevice currentDevice] orientation]、方向を決定できる場合に、可能であれば方向を知るためにを使用することです。しかし、フラットになると、最後の状態になります。

人々がiPadをフリックして、風景のオリエンテーションを正しい方向に向けるのを何回見たことがありますか。

于 2012-08-29T16:41:32.623 に答える
1

とった!

を使用して回避策を講じることができました

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

ビューロードでも、方向が。でない場合、このメソッドがトリガーされますUIInterfaceOrientationPortrait

UIViewデバイスがフラットであっても、向きが自動的に修正され、ポートレートモードかランドスケープモードかを検出するのに十分な遅延があるようです。

編集:

それviewDidAppearまでにがトリガーされると、[self interfaceOrientation]は正しい値になります。したがって、その方法まで待つことができれば、そこに到達することもできます。

于 2012-08-29T17:52:37.117 に答える