有些情况下uiviewcontroller自带的rotate方法会不起作用,所以需要使用uidevice的Orientation Changed Notification方法
Orientation Changed Notification使用方法:
//----- SETUP DEVICE ORIENTATION CHANGE NOTIFICATION -----
UIDevice *device = [UIDevice currentDevice]; //Get the device object
[device beginGeneratingDeviceOrientationNotifications]; //Tell it to start monitoring the accelerometer for orientation
NSNotificationCenter *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];
//********** 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;
if ([[note object] orientation] == UIDeviceOrientationUnknown ||
[[note object] orientation] == UIDeviceOrientationFaceUp ||
[[note object] orientation] == UIDeviceOrientationFaceDown) return;
这样就可以放心使用 UIDeviceOrientationIsPortrait了