有些情况下uiviewcontroller自带的rotate方法会不起作用,所以需要使用uidevice的Orientation Changed Notification方法
Orientation Changed Notification使用方法:
Orientation Changed Notification
Add to #AppDelegate.m didFinishLaunchingWithOptions
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了