0

オリエンテーションのコールバックに問題があります。私のアプリはランドスケープ モードで実行されますが、2 つのモード (左/右) が利用可能です。ビューコントローラーには3つのメソッドがあります

- (BOOL)shouldAutorotate
{
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight);
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    // some setup
}

次に、コールバックからタッチを取得し、座標系に変換します。

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //...
    CGPoint     p=[[touches anyObject] locationInView:nil];
    // some transforms
}

そして、これはすべてのケースで、すべてのテスト デバイス (iPhone 3GS - iOS6 および iPad2 iOS7) で正常に動作します。しかし、App Store でのリリース後、画面回転後にタッチが正しく動作しないという報告が 2 件あります (iOS6 の iPad 4 および iPod 4)。メソッド willAnimateRotationToInterfaceOrientation: は呼び出されていないと思いますが、動作の起源について少し混乱しています (同様のシステムを備えた他のデバイスでも機能するため)。同様の問題を見たことがありますか?

4

1 に答える 1

4

iOS6 以降、非willAnimateRotationToInterfaceOrientation:表示のビュー コントローラーに対してメソッドが呼び出されなくなりました。したがって、View Controller が別のコントローラーを提示した場合、他のコントローラーだけがこれらの通知を聞くことができます。

インターフェイス指向ロジックをviewWillLayoutSubviewsおよびに移動し、プロパティviewDidLayoutSubviewsをクエリすることをお勧めし[[UIApplication sharedApplication] statusBarOrientation]ます。

于 2013-10-21T21:14:38.960 に答える