4

私のアプリは横向きモードで正しく起動し、うまく機能します:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    if(interfaceOrientation == UIInterfaceOrientationPortrait)
        return NO;
    if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft )
        return YES; 
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

そして Info.plist を更新しました

UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight

メインコントローラーで、あるViewControllerを別のViewControllerに切り替えます

characterController = [ [ CharacterController alloc ] init];
myCurrentViewController = characterController;
self.view =  myCurrentViewController.view ;

読み込まれますが、向きは縦モードです。次に iPhone を回転させると、横向きモードに修正されます。新しいviewControllerをmainControllerにロードするときに横向きを維持する方法はありますか?

4

7 に答える 7

7

self.view=otherVC.viewアプローチには十分注意してください。UIViewController は、単一のビューを管理するためのものです。ビューを交換するようには設計されていません (これが、向きの変更が機能しない理由です)。これ-didReceiveMemoryWarningは、ViewController が画面上にない場合などに重要です。ビューを静かにダンプし、画面に戻ったら、NIB からビューをリロードします (または再実行します-loadView)。

モーダルビューが機能するように構築されているわけではありませんが、あなたのpresentModalViewController:アプローチはいくらか優れています。少なくとも、各 ViewController が独自のビューを管理できるようにします。通常、ここでは UITabBarController または UINavigationController を使用します。これらを避けているのには何らかの理由があると思います。

これに対する私の推奨される解決策は、UIView をメイン ビュー コントローラーのビューに (IBOutlet として、またはコードで) 追加することです。UIViewController のビューを交換するのではなく、そのビューを交換します。私はおそらく先に進み、UIViewController をサブクラス化してこれを処理し、UITabBarController をモデルにしたメソッドを使用します。

@interface RNSwappableViewController : UIViewController
{
    ...
}
@property(nonatomic, assign) id<RNSwappableViewControllerDelegate> delegate;
@property(nonatomic) NSUInteger selectedIndex;
@property(nonatomic, assign) UIViewController *selectedViewController
@property(nonatomic, copy) NSArray *viewControllers;
@end

@protocol RNSwappableViewControllerDelegate : NSObject
- (void)swappableViewController:(RNSwappableViewController *)swappableViewController didSelectViewController:(UIViewController *)viewController
@end
于 2009-05-12T20:44:06.193 に答える
3

推奨コードを使用しました。実際、テーブルは回転します。ただし、タイトルバーは通常の縦向きと位置のままです。タイトルバーの位置を変更するにはどうすればよいですか?

//テーブルビューを回転させるカスタム表示

- (void)viewDidAppear:(BOOL)animated
{
    self.view.transform = CGAffineTransformMakeRotation(-3.14 * (90) / 180.0);
    self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
    self.view.center = CGPointMake(160.0f, 240.0f);

}
于 2013-01-09T21:48:04.233 に答える
1

実装する必要があると思います

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

CharacterController でも同様です。

于 2009-05-07T17:48:59.523 に答える
1

別の解決策を見つけました:

[myCurrentViewController presentModalViewController: newController animated: NO];
于 2009-05-11T04:04:37.773 に答える
0

モーダルをUITableViewControllerに追加していたことを除いて、まったく同じ問題がありました。View Controllerのデリゲートによって向きが確認される前にモーダルが表示されたため、viewDidLoadから呼び出された場合にのみ問題になることがわかりました。

そのため、viewDidLoad から呼び出されたタイマーで performSelector 呼び出しを使用しました。正しい向きでロードされるようになりました。

于 2011-03-15T20:22:14.443 に答える
0

電話が横向きの場合でも、UIInterfaceOrientationPortrait で shouldAutorotateToInterfaceOrientation が呼び出されるという問題がありましたか?

私は主に縦向きのみのアプリを持っており、1つのView Controllerを使用して、自動回転したいpresentModalViewControllerを立ち上げましたが、うまく機能しましたが、開いているときは常に縦向きで始まりました。ビュー コントローラーは、デバイスの方向よりも親ビュー コントローラーの方向を優先しているようです。

これは、モーダルビューのビューコントローラーで私にとってうまくいったものです:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

// if device orientation is one of these, don't care what our interface orientation is
if (deviceOrientation == UIDeviceOrientationUnknown && deviceOrientation == UIDeviceOrientationFaceUp && deviceOrientation == UIDeviceOrientationFaceDown)
  return YES;

// otherwise only return YES for the ui orientation matching the current device orientation
return (interfaceOrientation == deviceOrientation);
}
于 2009-10-28T19:12:34.947 に答える
-2

改めて自分なりの答えを見つけました。笑

新しいViewControllerをロードした後

self.view =  myCurrentViewController.view;

コントローラーを更新して、新しい ViewController を横向きにします

self.view.transform = CGAffineTransformMakeRotation(-3.14 * (90) / 180.0);
self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
self.view.center = CGPointMake(160.0f, 240.0f);
于 2009-05-07T19:38:29.060 に答える