2013-03-04 3 views
3

В настоящее время я создаю приложение iOS, и только поддерживаемые ориентации - это левый и правый ландшафты. Я указал это несколько способов:iOS App UIView rotating, контент не

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

И я указал поддерживаемые ориентации, как только ландшафтные единицы в Info.plist приложения. Когда я запускаю приложение на своем устройстве (или даже в симуляторе), я знаю, что корневой вид находится в альбомной ориентации (переключатель находится на длинной стороне экрана, как и центр уведомлений), однако содержимое все еще происходит из в левом верхнем углу экрана, как в портретном режиме, а не в левом нижнем углу или в правом верхнем углу, как будто я хочу, чтобы это было. Я понятия не имею, что может быть причиной содержания не вращается с родительским видом, так как этот код работал на прошивке 5, но не на прошивке 6.

EDIT: Here's a screenshot.

EDIT: Вот мое главное. м:

#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 
+0

Я не мог понять очень ясно, как вы хотите, чтобы он был представлен ... Если возможно, разместите некоторые изображения, даже каркасы ... – CainaSouza

+0

@CainaSouza Я добавил скриншот этой проблемы. – Aehmlo

+0

Вы используете навигационный контроллер? – CainaSouza

ответ

0

Только rootViewController из вашего UIWindow получит информацию о ротации.

[_window setRootViewController:_rootViewController]; 

Отъезд the apple technical notes.

+0

Спасибо, это, кажется, самый простой способ решить мои проблемы. Любая идея, почему это не относится к iOS 5 (например, она отлично работала на iOS 5, но не на 6)? – Aehmlo

+0

Для iOS 6 требуется rootViewController – CainaSouza

1

Попробуйте изменить метод из этого

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

к этому

-(NSUInteger)supportedInterfaceOrientations{ 
} 

EDIT

Попробуйте вызвать ваш взгляд внутри navigationcontroller как это:

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

EDIT

#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 
+0

Жаль, что это 'NSUInteger', а не' NSInteger' – CainaSouza

+0

Кроме того, установите точку останова при этом методе (новый с этой новой сигнатурой) и проверьте, вызвано ли оно. – CainaSouza

+0

Он попал в точку останова, поэтому его зовут. Но проблема остается. – Aehmlo

1

Попробуйте добавить:

_window.rootViewController = _viewController; 

EDIT: В любом случае ваш код выглядит следующим образом, используя "устаревшее" стиль. Я бы предложил создать новый проект для iOS6 и использовать его шаблон. Он работал над iOS5, но изменения iOS.

Смежные вопросы