Как получить правильную ориентацию интерфейса в приложении appDidBecomeActive: (UIApplication *)? - PullRequest
0 голосов
/ 16 ноября 2011

Мне нужно получить ориентацию интерфейса в приложении appDidBecomeActive: (UIApplication *)

[application statusBarOrientation];

, но если приложение запускается из закрытого (т.е. не возобновляется из фона), оно всегда возвращает портрет, оно работает при возобновлениииз фона.

Кроме того, я попытался использовать ориентацию UIDevice вместе с ориентацией строки состояния, но ориентация UIDevice может не соответствовать ориентации интерфейса.

Так есть ли способ получить ориентацию интерфейса в приложенииделегат, appDidBecomeActive?

Спасибо!

1 Ответ

1 голос
/ 16 ноября 2011

Что вам нужно сделать, это обработать это в вашем контроллере заставки.Вы можете использовать комбинацию interfaceOrientation, shouldAutorotateToInterfaceOrientation, didAutorotateToInterfaceOrientation и т. Д.

По сути, создайте контроллер представления, который будет у вас в качестве корневого контроллера представления.Там определите изменения ориентации в shouldAutorotateToInterfaceOrientation (в viewDidLoad это всегда будет портрет или пейзаж в зависимости от вашей xib, так что не делайте этого там).Делайте ваши изображения с помощью NSTimer или чего-то еще.После таймера покажите обычные экраны приложения.

Вы не сможете отобразить изображение, пока у вас не будет контроллера представления, поэтому вы должны подождать, пока контроллер представления не выдаст вам изменения интерфейса.Вы должны сосредоточиться на этом первом контроллере представления, а не на делегате приложения.

AppDelegate.h

#import <UIKit/UIKit.h>

@class SplashViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (retain, nonatomic) IBOutlet UIWindow *window;
@property (retain, nonatomic) SplashViewController *splashController;

-(void)showSplash;
@end

AppDelegate.m

#import "AppDelegate.h"
#import "SplashViewController.h"

@implementation AppDelegate
@synthesize window = _window, splashController = _splashController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self showSplash];
    [self.window makeKeyAndVisible];
    [self performSelector:@selector(registerBackground) withObject:nil afterDelay:5.0];
    return YES;
}

-(void)showSplash
{
    SplashViewController *splash = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil];
    [self.window addSubview:splash.view];
    self.splashController = splash;
    [splash release];
    //have to add a delay, otherwise it will be called on initial launch.
    [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(removeSplash:) userInfo:nil repeats:NO];

}

-(void)registerBackground
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(returnFromBackground:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];
}

-(void)returnFromBackground:(NSNotification *)notification
{
    [self showSplash];
}

-(void)removeSplash:(NSTimer *)timer
{
    [self.splashController.view removeFromSuperview];
    self.splashController = nil;
}


- (void)dealloc
{
    [_window release];
    [_splashController release];
    [super dealloc];
}
...