视图加载期间iOS 6中的设备方向处理?
我有一个选项卡栏应用程序。 我正在使用XCode 4.3.3。 我用iOS6的东西升级到4.5.2。
我在每个视图的shouldAutorotateToInterfaceOrientation
代码将检查当前的设备方向,并正确地放置所有的UI组件。
但升级到iOS 6后,此代码不执行。 我已经尝试了将近一天来解决这个问题,但没有运气。
我也试过了
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
在viewLoad
, viewDidLoad
, viewWillAppear
如果我想在视图加载期间检查方向,并且在视图加载期间将UI组件放置到合适的位置,我该怎么做。 请给出您的build议。
谢谢
如果你想检查哪个是当前的方向,那么你只需在prifix.pch下面写一行
#define isPortrait [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown
然后在那里你想检查方向,写下面的条件
if(isPortrait) { //portrait mode.... } else { //landscape mode.... }
让我知道这是工作或不…
快乐的编码!
要检查ios6中的方向,你将不得不写下面的方法,并在你的info.plist中,你将不得不定义你想要的方向…
让我知道它是否工作!
快乐的编码!
- (BOOL)shouldAutorotate{ return NO; } - (NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait;//you can write here which ever orientation you want.. }
你可以像这样pipe理Oriantation:
-(BOOL)shouldAutorotate { return YES; }
并在ViewWillApear
设备中每次检查ViewWillApear
Oriantation:
- (void)willRotateToOrientation:(UIInterfaceOrientation)newOrientation { if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { if (newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight) { //set your landscap View Frame [self supportedInterfaceOrientations]; } } else if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)) { if(newOrientation == UIInterfaceOrientationPortrait || newOrientation == UIInterfaceOrientationPortraitUpsideDown){ //set your Potrait View Frame [self supportedInterfaceOrientations]; } } // Handle rotation } -(void)viewWillAppear:(BOOL)animated { [self willRotateToOrientation:[[UIDevice currentDevice] orientation]]; [super viewWillAppear:YES]; }
UPDATE
可能人们使用检查设备的orientation
像下面的方式把这一行ViewWillApear
: –
[[UIApplication sharedApplication] statusBarOrientation]; [[UIDevice currentDevice] orientation]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotated:) name:UIDeviceOrientationDidChangeNotification object:nil];
和
-(void)deviceRotated:(NSNotification*)notification { UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { //Do your stuff for landscap } else if(orientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { //Do your stuff for potrait } }
在viewDidLoad方法你需要检查相同的,因此你需要编写的代码,除非它可能会影响视图,如果它不在肖像上。