フレームと変換に関して、iOSが横向きの向きを処理している理由を詳しく説明してもらえますか?
私が話しているのは、さまざまなビューのライフサイクル メソッドでビューの説明をログに記録することによって表示される、次の動作です。
viewDidLoad: "UIView: 0x1edb5ba0; frame = (0 0; 568 320); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewWillAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewDidAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
この影響は微妙ですが、非常に興味深いものです。
たとえば、初期インターフェイスの向きとサポートされているインターフェイスの向きの両方を「横 (右ホーム ボタン)」に設定してアプリを起動します。
次に、rootViewController を次のように表示します。
self.viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
self.window.rootViewController = self.viewController;
この .xib の向きは横に設定され、フレームは 0、0、568、320 に設定されています。正しく表示され、画面上のすべての点に触れることができます。
次のようにサブビューを提示すると、問題が発生します。
SomeView *someView = [[SomeView alloc] initWithFrame:self.view.frame];
[self.view addSubview:someView];
この時点で、self.view.frame は (0 0; 320 568) として報告され、self.view.transform は transform = [0, 1, -1, 0, 0, 0] として報告されます。最良のシナリオは、表示したばかりのビューの左 320 ピクセルしかタッチできないという最終結果です。最悪のケースは、ビューのレイアウトがバラバラになることです。
さまざまなSOの質問のおかげで、これを行う適切な方法は次のとおりであることがわかりました。
SomeView *someView = [[SomeView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:someView]
私が学んでいないのはその理由であり、私はそれについて非常に興味があります.
私がさらに興味を持っているのは、インスタンス化と表示中にビューが操作される理由です。
ランドスケープのみのアプリケーションに悩まされてからかなりの時間が経ちましたが、何らかの理由で、これの現在の実装は以前のバージョンの iOS とは異なると思いますが、それは正しいですか?