0

ルート ビュー コントローラーの viewDidLoad に、方向検出用のオブザーバーを追加しました。

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willRotateToInterfaceOrientation:duration:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 

次のようなメソッドを追加しました。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration {
    NSLog(@"%f,%f",self.view.frame.size.width,self.view.frame.size.height);
}

私は、ポートレートで 768,1004、ランドスケープで 1004,768 という結果を期待していました。しかし、私の結果は両方とも 768,1004 です。ポートレートの場合は 748,1024 になることもあります。この奇妙な動作の理由がわかりません。解決策を知っている場合は、私を助けてください。

編集 この同じコードは私の別のプロジェクトで機能し、それらの違いを見つけることができませんでした

4

3 に答える 3

1

次の 2 つのメソッドを追加します。

- (BOOL)shouldAutorotate
{
      return TRUE;
}

- (NSUInteger)supportedInterfaceOrientations
{
     return UIInterfaceOrientationMaskAll;
}

ここですべての変更を行います。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)  interfaceOrientation duration:(NSTimeInterval)duration
{
     NSLog(@"%f,%f",self.view.frame.size.width,self.view.frame.size.height);
}  
于 2013-08-02T04:44:54.700 に答える
0

[Apple の のドキュメントを見るとwillRotateToInterfaceOrientation、次のように書かれています]:

ユーザー インターフェイスが回転を開始する直前にビュー コントローラーに送信されます。

つまり、フレームの幅と高さは、回転するの向きにする必要があります。

おそらく、回転が完了した後、たとえば 中にフレーム座標を取得しようとすると、didRotateFromInterfaceOrientation達成したいと思っていたものに近いものが表示される場合があります。

于 2013-08-02T04:43:48.593 に答える