3

私は現在 iOS アプリを作成しています。サポートされている方向は左右の横向きのみです。これをいくつかの方法で指定しました。

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); //iOS 5 compatibility.
}
-(NSInteger)supportedInterfaceOrientations:(UIWindow *)window{
    return UIInterfaceOrientationMaskLandscape; //iOS 6
}
-(BOOL)shouldAutorotate{
    return YES;
}

また、アプリの Info.plist で、サポートされている向きを横向きのみとして指定しました。デバイス (またはシミュレーター) でアプリを実行すると、ルート ビューが横向きになっていることがわかります (スイッチャーは画面の長辺にあり、通知センターも同様です)。私が望むように、左下または右上ではなく、縦向きモードの場合のように画面の左上隅。このコードは iOS 5 では機能しましたが、iOS 6 では機能しなかったため、コンテンツが親ビューで回転しない原因が何なのかわかりません。

編集:これがスクリーンショットです。

編集:これが私のmain.mです:

#import <UIKit/UIKit.h>
int main(int argc, char **argv) {
    NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
    int ret = UIApplicationMain(argc, argv, @"ClockApplication", @"ClockApplication");
    [p drain];
    return ret;
}

そして、ここに私のClockApplication.mmがあります:

#import "RootViewController.h"

@interface ClockApplication: UIApplication <UIApplicationDelegate> {
    UIWindow *_window;
    RootViewController *_viewController;
}
@property (nonatomic, retain) UIWindow *window;
@end

@implementation ClockApplication
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    _viewController = [[RootViewController alloc] init];
    [_window addSubview:_viewController.view];
    [_window makeKeyAndVisible];
}

- (void)dealloc {
    [_viewController release];
    [_window release];
    [super dealloc];
}
@end
4

3 に答える 3

1

追加してみてください:

_window.rootViewController = _viewController;

編集:とにかく、コードは「非推奨」スタイルを使用しているように見えます。iOS6 用の新しいプロジェクトをセットアップし、そのテンプレートを使用することをお勧めします。iOS5 で動作していましたが、iOS が変わります。

于 2013-03-04T20:14:55.450 に答える
1

これからメソッドを変更してみてください

-(NSInteger)supportedInterfaceOrientations:(UIWindow *)window{
}

これに

-(NSUInteger)supportedInterfaceOrientations{
}

編集

次のように、ナビゲーション コントローラー内でビューを呼び出してみてください。

UIViewController *yourViewController = [[UIViewController alloc] init];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:yourViewController];
nc.navigationBarHidden = YES;
[self.navigationController presentModalViewController:nc animated:NO];
[self.navigationController dismissModalViewControllerAnimated:NO];

編集

#import "RootViewController.h"

@interface ClockApplication: UIApplication <UIApplicationDelegate> {
    UIWindow *_window;
    RootViewController *_viewController;
}
@property (nonatomic, retain) UIWindow *window;
@end

@implementation ClockApplication
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:_viewController];
    nc.navigationBarHidden = YES;

    _window.rootViewController = nc;
    [_window makeKeyAndVisible];
}

- (void)dealloc {
    [_viewController release];
    [_window release];
    [super dealloc];
}
@end
于 2013-03-04T19:43:14.853 に答える
0

rootViewControllerあなたのだけがUIWindowローテーション イベントを受け取ります。

[_window setRootViewController:_rootViewController];

Apple のテクニカル ノートを参照してください。

于 2013-03-04T20:17:07.553 に答える