n.e*_*ind 19 iphone cocoa-touch ipad landscape-portrait uideviceorientation
我试图找出设备是纵向还是横向模式.如果设备没有朝上,我的代码工作得很好.如果它面朝上(和方向== 5),它将无法区分肖像和风景.如果UIDeviceOrientation是FaceUp,有没有在风景/肖像方面确定"方向"?
我的代码:
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
NSLog(@"orientation: %d", interfaceOrientation);
if (interfaceOrientation == UIDeviceOrientationIsLandscape(interfaceOrientation)) {
NSLog(@"LANDSCAPE!!!");
}
if (interfaceOrientation == UIDeviceOrientationIsPortrait(interfaceOrientation)) {
NSLog(@"PORTRAIT!!!");
}
Run Code Online (Sandbox Code Playgroud)
jba*_*100 41
你不应该混淆UIDeviceOrientation和UIInterfaceOrientation,它们是不同的,但相关的如通过其声明
typedef enum {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
} UIDeviceOrientation;
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;
Run Code Online (Sandbox Code Playgroud)
UIDeviceOrientation告诉你设备的方向是什么.UIInterfaceOrientation告诉您界面的方向是什么,并由谁使用UIViewController.UIInterfaceOrientation显然是纵向或横向的,而UIDeviceOrientation可以具有不明确的值(UIDeviceOrientationFaceUp,UIDeviceOrientationFaceDown,UIDeviceOrientationUnknown).
在任何情况下,你不应该试图确定与一个UIViewController的方向[[UIDevice currentDevice] orientation],因为无论什么设备方向是UIViewController interfaceOrientation财产可以是不同的(例如,如果您的应用程序不旋转为横向,都[[UIDevice currentDevice] orientation]可以UIDeviceOrientationLandscapeLeft同时viewController.interfaceOrientation可以UIInterfaceOrientationPortrait).
更新:
自iOS 8.0起,[UIViewController interfaceOrientation]不推荐使用.这里提供的替代方案是[[UIApplication sharedApplication] statusBarOrientation].这也回来了UIInterfaceOrientation.
我创建这个代码框架来处理有意和不需要的设备方向,在我的情况下,我想忽略UIDeviceOrientationUnknown,UIDeviceOrientationFaceUp和UIDeviceOrientationFaceDown,缓存最后允许的方向.此代码适用于iPhone和iPad设备,对您有用.
- (void)modXibFromRotation {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
NSString *device = [[UIDevice currentDevice]localizedModel];
UIInterfaceOrientation cachedOrientation = [self interfaceOrientation];
if ([device isEqualToString:@"iPad"]) {
if (orientation == UIDeviceOrientationUnknown ||
orientation == UIDeviceOrientationFaceUp ||
orientation == UIDeviceOrientationFaceDown) {
orientation = (UIDeviceOrientation)cachedOrientation;
}
if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) {
/* Your code */
}
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) {
/* Your code */
}
}
if ([device isEqualToString:@"iPhone"] || [device isEqualToString:@"iPod"]) {
if (orientation == UIDeviceOrientationUnknown ||
orientation == UIDeviceOrientationFaceUp ||
orientation == UIDeviceOrientationFaceDown) {
orientation = (UIDeviceOrientation)cachedOrientation;
}
if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) {
/* Your code */
}
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) {
/* Your code */
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8574 次 |
| 最近记录: |