0

私のアプリケーションには、いくつかのカスタマイズされた UIViewControllers のビューを表示する AppDelegate のウィンドウに追加された UITabBarController のビューがあります。私が持っているすべてのView Controllerで:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return TRUE;
}

アプリケーションがデバイスとともに回転するように実装されています。

ビューコントローラーの1つで、カスタマイズされたサブビューオブジェクトによって生成されたタッチ座標と、回転後、これらはビューコントローラーの座標から回転された座標空間にあります。

そのため、これを実現する最善の方法について以前に質問したところ、viewController のビューの変換を使用して座標を同じ回転にするようにアドバイスされました。原理的には良さそうだったのですが、使ってみると思い通りにいきませんでした。そのため、その理由を調べるために、いくつかの NSLog を入れようとしました。

私が配置したView Controllerで:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    NSLog(@"VC Transform: %@", NSStringFromCGAffineOrientation(self.view.transform));
}

画面が明らかに回転していても、すべての向きで出力が [1, 0, 0, 1, 0, 0] であることがわかりました。コード内で何かを割り当てようとしているわけではありません。

だから私は追加しようとしました:

NSLog(@"AD Tansform: %@", NSStringFromCGAffineOrientation(mainDelegate.window.transform));

もっと面白いことが起こっているかどうかを確認するために、同じ結果が見つかりました。また、ローテーションに続いて何の作業も行っていない他のView Controllerの1つに追加しようとしましたが、同じことがわかりました。

ビューの変換が変更されない理由を考えられる人はいますか?

4

1 に答える 1

1

ウィンドウとビューの変換プロパティは、インターフェイスの回転によって変更されません。その変換は、ユーザーが設定することを意図しています。

インターフェイスがどのように回転するかを確認するには、次を試してください。

[[UIDevice currentDevice] orientation]

そして、この回答のようにインターフェイスの向きの通知を購読します: How to subscribe self on the event of Device Orientation(not interface orientation)?

于 2011-11-07T08:56:36.043 に答える