有些情況下uiviewcontroller內建的rotate方法會不起作用,所以需要使用uidevice的Orientation Changed Notification方法
Orientation Changed Notification使用方法:
Orientation Changed NotificationAdd to #AppDelegate.m didFinishLaunchingWithOptions
//----- SETUP DEVICE ORIENTATION CHANGE NOTIFICATION -----UIDevice *device = [UIDevice currentDevice];//Get the device object[device beginGeneratingDeviceOrientationNotifications];//Tell it to start monitoring the accelerometer for orientationNSNotificationCenter *nc = [NSNotificationCenter defaultCenter];//Get the notification centre for the app[nc addObserver:self//Add yourself as an observer selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:device];
Function To Receive Notification Message
//********** ORIENTATION CHANGED **********- (void)orientationChanged:(NSNotification *)note{NSLog(@"Orientation has changed: %d", [[note object] orientation]);}
不過這樣會有個問題,那就是UIDeviceOrientation是有6種,而UIInterfaceOrientation是4種,這樣在使用UIDeviceOrientationIsPortrait的時候如果取反就會包含unknown或者faceup等情況
typedef enum { UIDeviceOrientationUnknown, UIDeviceOrientationPortrait, UIDeviceOrientationPortraitUpsideDown, UIDeviceOrientationLandscapeLeft, UIDeviceOrientationLandscapeRight, UIDeviceOrientationFaceUp, UIDeviceOrientationFaceDown} UIDeviceOrientation;解決方案:在orientationChanged:(NSNotification *)note中加入如下代碼:
if ([[note
object] orientation] ==
UIDeviceOrientationUnknown ||
[[note
object] orientation] ==
UIDeviceOrientationFaceUp ||
[[note
object] orientation] ==
UIDeviceOrientationFaceDown) return;
這樣就可以放心使用UIDeviceOrientationIsPortrait了