1

2 つのビュー コントローラーを持つアプリがあります。最初のViewControllerは縦向きで問題ありませんが、2番目のView Controllerを読み込んでいるときに、アプリの向きを横向きにすることができませんでした...問題はiOS 6にあります.

SOで見つけたものはすべて試しました。

とを使用[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];viewWillAppearviewDidLoad

また:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
     {
    if (interfaceOrientation == UIInterfaceOrientationPortrait) {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    } else {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }
   }

 -(BOOL)shouldAutorotate
  {
return YES;
  }

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
 {
return UIInterfaceOrientationLandscapeRight;
 }

-(NSInteger)supportedInterfaceOrientations{

return UIInterfaceOrientationMaskLandscapeRight;
}
4

5 に答える 5

1

2nd View Controller's viewDidLoadメソッドにこれらのコードを に追加transform viewlandscapeます。

[self rotateController:self degrees:-90];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
//set it according to 3.5 and 4.0 inch screen in landscape mode
[self.view setBounds:CGRectMake(0, 0, 480, 320)]; 

メソッドを追加rotateController:

 -(void) rotateController:(UIViewController *)controller degrees:(NSInteger)aDgrees
{
  UIScreen *screen = [UIScreen mainScreen];
  if(aDgrees>0)
    controller.view.bounds = CGRectMake(0, 0, screen.bounds.size.height, screen.bounds.size.width);
  else
  {
    controller.view.bounds = CGRectMake(0, 0, screen.bounds.size.width, screen.bounds.size.height);
  }
  controller.view.transform = CGAffineTransformConcat(controller.view.transform, CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(aDgrees)));
}

viewWillDisappear'sメソッドで今。これらを追加します。transform viewprotrait

[self rotateController:self degrees:90];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
//set it according to 3.5 and 4.0 inch screen in protrait mode
[self.view setBounds:CGRectMake(0, 0, 320, 480)];

また、orientationメソッドが追加されていない場合は、これらを追加する必要があります。

- (BOOL)shouldAutorotate
{    
  //make view landscape on start
  return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
  return UIInterfaceOrientationMaskLandscapeLeft;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
  return UIInterfaceOrientationLandscapeLeft;
}

編集macro:これらを追加radian

#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
于 2013-05-06T05:05:58.533 に答える
0

アプリケーションの概要 - >展開情報で横向きモードを選択する必要があります。

また、UI のデザインに xib ファイルを使用している場合は、2 番目のビュー コントローラーの向きを横向きに設定する必要があります。

于 2013-05-06T04:52:10.767 に答える
0
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
       return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

-(BOOL)shouldAutorotate
{
     return NO;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

-(NSInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight;
}

メソッドで NO を返していませんでしたshouldAutorotate。既存のコードをこれに置き換えてください。それがあなたを助けることを願っています。

于 2013-05-06T05:09:16.417 に答える