2011-11-07 17 views
4

私は現在3つのビューを持っています。残りは肖像画にとどまりながら、いずれかの向きに自動回転するのに必要なものは1つだけです。今は私の設定はスプラッシュビューコントローラでビューAにフェードインし、ビューAはビューBに切り替えるボタンです。私が望むのは、ビューBを任意の方向に回転できるようにすることです。xcodeで1つのビューしか自動回転しませんか?

splashviewcontrollerのshouldautorotatetointerfaceorientationでYESを返すと、これは親ビューであるためすべてのビューが回転します。スプラッシュビューでのみポートレートを返すと、他のビューからYESが返されても何も回転しません。ビューBのみを回転させる方法はありますか?コードを提供できるのであれば、私はそれを手動でやりたいです。おかげ

+0

Bはどのように追加されますか?それが独立していない場合(すなわち、ナビゲーションコントローラを介して)、これが問題である可能性があります。 – Stavash

+0

@stavashどうすればそれを独立させることができますか?私はUIViewControllerを追加することによって追加しましたサブクラス – davis

+0

@stavashは、タブバーなしで独立したビューを作る方法はありますか?ボタンを使用して独立したビューにリンクすることはできますか? – davis

答えて

4

は手動そうのような任意の所望のUIViewオブジェクトの回転を疥癬ことができます。

EDIT:

のinitで

かのviewDidLoad

- (void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name:UIDeviceOrientationDidChangeNotification object:nil]; 

    [super viewDidLoad]; 
} 

#define degreesToRadian(x) (M_PI * (x)/180.0) 

-(void)rotate{ 

    self.view.bounds = CGRectMake(0, 0, 0, 0); 

    if ([UIDevice currentDevice].orientation == UIInterfaceOrientationPortrait){ 


     CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(0)); 
     landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0); 

     self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 320, 480); 

     [self.view setTransform:landscapeTransform]; 


    } else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationPortraitUpsideDown){ 


     CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(180)); 
     landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0); 

     self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 320, 480); 

     [self.view setTransform:landscapeTransform]; 

    } else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeRight){ 

     CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90)); 

     landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0); 
     self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 480, 320); 


     [self.view setTransform:landscapeTransform]; 

    }else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeLeft){ 

     CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(270)); 

     landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0); 
     self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 480, 320); 

     [self.view setTransform:landscapeTransform]; 
    } 

} 
+0

私はこれを私のViewB.mに入れても何も起こりません。ビューBはmodalviewcontrollerですが、私は間違っているかもしれない何か愚かなことはありますか? – davis

+0

動作させるには、回転イベントをキャッチした後にrotateメソッドをトリガする必要があります。 Pls、Answer – Cyprian

+0

の編集を確認してください。これは完全に機能しますが、ビューが回転している間は、ViewBの内部のWebview内で再生するビデオがあり、回転する必要があります。これを達成するための提案はありますか?ありがとう – davis

0

インサイド対象と要約セクション、サポートされているインタフェースオリエンテーションすべてのアイテムが上下反転を除いて選択されているので、ビューを処理する.mファイルに移動してこのコードを使用するだけです。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

これは私のためのトリックでした。

関連する問題