0

UIViewControllerサブクラス内にこのコードがあります:

- (id)init {
    self = [super init];

    if (self) {            
        self.view.frame = [PDToolbox screenFrame];
        self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

        self.view.backgroundColor = [UIColor redColor];
    }

    return self;
}

回転方法に関して私が持っている唯一のものはこれです:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}

それでも、画面を横向きに回転させた後、ビューで NSLog を実行すると、次のようになります。

<UIView: 0x10061640; frame = (0 0; 320 480); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x10061670>>

通常のように回転するだけでなく、なぜこの変換を行っているのかわかりませんか? これは、回転後にその上に配置し、ビューのサイズに設定されたビューが 320x480 の位置になることを意味します。

編集:

人々は理解していません。そこで、以下を使用して、UIView と同じサイズのビューをその上に配置します。

UIView *anotherView = [UIView alloc] initWithFrame:controller.view.bounds];
[controller.view addSubview:anotherView];

anotherView を縦向きに追加すると、anotherView が縦向きに表示され、フレームは 320x480 になります。

anotherView を横向きに追加すると、anotherView が横向きに表示されますが、320x480 のフレームが表示されます。これは、なんらかの理由で、controller.view のフレームがまだ残っているためです。

4

2 に答える 2

0

フレームと境界は非常に異なるものです。あなたはAppleのViewGeometryガイドを読むべきです-それは私にとってかけがえのない多くの情報を含んでいます。

誰かがあなたを設定しているので、あなたの境界は常に320x480になりますtransform(これはに影響しますが、には影響しframeませんbounds)。

autoresizesSubviewsビューコントローラのビューのスーパービューがに設定されYESていること、および追加されたサブビューに適切なが含まれていることを確認してくださいautoresizingMask

于 2012-07-12T16:56:46.930 に答える
0

ビュー/コントローラーの階層はどのように見えますか? ビューのフレームを変更するのではなく、ビューに90°の回転変換を設定しているように見えます。自分で行っていない場合は、親ビューまたはビュー コントローラーである可能性があります。

于 2012-07-12T16:42:45.127 に答える