首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测IOS 7和IOS 8以及宽屏iPhone大小,使我的应用程序变得通用?

如何检测IOS 7和IOS 8以及宽屏iPhone大小,使我的应用程序变得通用?
EN

Stack Overflow用户
提问于 2014-12-16 01:36:43
回答 6查看 1.9K关注 0票数 0

我正在为所有设备以及IOS 7和IOS 8开发通用的IOS应用程序。我有以下宏:

此宏用于检测宽屏iPhone 5,此宏适用于IOS 7:

代码语言:javascript
复制
#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

此宏也适用于宽屏iPone 5,但仅适用于IOS 8:

代码语言:javascript
复制
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )

我需要将这些代码组合起来,使其在IOS 7和IOS 8上都能工作,为此,我需要选择器来检测IOS版本。

代码语言:javascript
复制
#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )
#define IS_WIDESCREEN      ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_WIDESCREEN_IOS8 : IS_WIDESCREEN_IOS7 )

然后,这篇文章的作者建议引用--“如果你也瞄准了iOS 7或更低版本,一定要使用特性检测,因为在iOS 8之前调用nativeBounds会使应用程序崩溃:”并给出了以下代码:

代码语言:javascript
复制
if( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] )
{
    /* Detect using nativeBounds - iOS 8 and greater */
}
else
{
    /* Detect using bounds - iOS 7 and lower */
}

请帮助我在这里,我是一个初学者,并希望了解如何使它工作。我应该把SKSpriteNode *背景= SKSpriteNode spriteNodeWithImageNamed:@“背景”放在哪里?

所有这些代码都来自于Stackoverflow文章中不同的帖子,这里是:How to detect iPhone 5 (widescreen devices)?

我上传了图片到拖放框,这里是链接https://www.dropbox.com/sh/pnll2e2jvo0uigs/AACOLbzzQqZlJEZZcBx7TMR1a?dl=0,文件夹名为measuredImages。下面是我用于添加背景的代码:#import "GameScene.h“

代码语言:javascript
复制
@implementation GameScene
-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"Background-568"]; background.anchorPoint = CGPointMake(0.5, 1);
        background.position = CGPointMake(self.size.width/2, self.size.height);
        [self addChild:background];}
    return self;
}

如果有人能把完整的代码与宏和用法的答案,我会非常感激。

重要最新情况:12.17.2014

这个问题得到了解决,包括正确的发射图像和我的应用程序运行在正确的分辨率,我使用屏幕边界与在ios7,正如Daij所建议的。感谢所有试图或帮助我解决这个问题的人,我个人想感谢Djan和sha的帮助和支持。如果你需要宽屏iPhone的代码,我会把它留在下面的答案中,它运行在iphones之上的iPhone 4和所有iPads上。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-12-16 10:22:53

您不需要使用操作系统来检测屏幕宽度。

只要包含正确的启动图像,您的应用程序将以正确的分辨率运行,您只需使用与ios7相同的屏幕边界即可。

我再次强调:包括正确的发射图像!然后使用UIScreen bounds

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LaunchImages.html

票数 1
EN

Stack Overflow用户

发布于 2014-12-16 01:52:49

当我需要一种快速而肮脏的方法来检测iOS7 7/8和iPhone/iPad设备时,我将使用以下宏:

代码语言:javascript
复制
#define IS_IOS8     ([[UIDevice currentDevice].systemVersion compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending)
#define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)

您可以使用以下宏:

代码语言:javascript
复制
if (IS_IPHONE) {
   // iPhone specific code
   ...
}
else {
   // iPad specific code 
   ...
}

if (IS_IOS8) {
   // Code specific to iOS8+
   ...
}
else {
   // Code specific to earlier versions of iOS
   ...
}

更新:要检测宽屏幕设备,可以使用以下宏(因为iOS8 UIScreen将知道方向,而纵向/景观中的高度将不同,因此可以检查这两种宏:

代码语言:javascript
复制
#define IS_WIDESCREEN (( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) || ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.width - ( double )568 ) < DBL_EPSILON ))
票数 2
EN

Stack Overflow用户

发布于 2014-12-17 13:18:53

使用这个非常有用

代码语言:javascript
复制
#define IS_IPHONE       ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 480)
#define IS_IPHONE5      ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 568)
#define IS_IPHONE6      ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 667)
#define IS_IPHONE6PLUS  ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 736)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27496178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档