2

私はInterfaceBuilderのUIViewControllerにカスタムUIView videoViewを持っています。向きを変えるときの位置UIview

ロードするときれいに見えますが、「肖像画から風景に」と言えば、座標が示す場所には移動しません。そしてそれを元に戻すと再び間違っています。あなたは回転が起こる前に呼び出されwillRotateToInterfaceOrientation:を、使用している

-(void)viewWillAppear:(BOOL)animated 
{ 
    [self processRotation:self.interfaceOrientation]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
}  
-(void)processRotation:(UIInterfaceOrientation)_interfaceOrientation 
{ 
    if (_interfaceOrientation == UIInterfaceOrientationLandscapeLeft || _interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     videoView.frame = CGRectMake(20.0f, 77.0f, 984.0f, 595.0f); 
    } 

else if (_interfaceOrientation == UIInterfaceOrientationPortrait || _interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     videoView.frame = CGRectMake(20.0f, 297.0f, 728.0f, 453.0f); 
    } 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [self processRotation:toInterfaceOrientation]; 
} 
+0

こんにちは、私はあなたの質問に役立つ私の最近の投稿をお勧めしますか:http://stackoverflow.com/questions/6580052/how-to-change-view-of-the-viewcontroller-when- 6580111#6580111 – Luke

答えて

5

に設定されていることを、確実にしなければならない

if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation) && UIInterfaceOrientationIsLandscape(interfaceOrientation) 

はオリエンテーションは代わりに、まだ変更されていないので

videoView.frame = CGRectMake(20.0f, 77.0f, 984.0f, 595.0f); 

書き込み:

videoView.frame = CGRectMake(77.0f, 22.0f, 595.0f, 984.0f); 

また、Interface Builderに入り、そこに自動サイズ変更用のマスクを変更して、コード内で何もしないでください。自動サイズ変更マスクを変更するには、右ペインの「サイズ」インスペクタ(定規アイコン)に移動します。あなたは、縦と横の矢印のある正方形と、それぞれの側から出てくるI字型の線が表示されます。赤いボタンをオンにしてクリックすると、ビューのサイズが変更されたときにオブジェクトがその方向に自動的に伸びます。 I形の線をオンにすると、基本的にビューがその側面にドッキングされます。つまり、ビューの側面とその側面の間の距離は常に同じになります。例: あなたが景色が薄くなる上部にツールバーがある場合ではなくがトップラインを選択するか、ビューがトップツールバーから数マイル離れたところで終了します。

それとも

self.interfaceOrientation = toInterfaceOrientation; 

を呼び出した後、手動で元のコードのように座標を変更することで、オートローテーションのために何も返さないし、それを自分で実装することができます。

あなたは実際にそれを試す必要があります。私はいつもこの問題にぶつかり、毎回違う方法で修正します。

+0

あなたはまた、参照のために自動サイズ変更用マスクの詳細を提供することができます。 +1 –

0

は、私は、次のコードを持っています。 videoViewにautoresizingMaskが設定されている場合は、自動サイズ設定が後で開始され、ビューの位置が変更されます。あなたは、通常- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)durationでこれを行うと、あなたは風景に肖像画から行っていることを確認し、ビューが回転すると、あなたのvideoViewのautoresizingMaskがUIViewAutoresizingNone

関連する問題