我正在为所有设备以及IOS 7和IOS 8开发通用的IOS应用程序。我有以下宏:
此宏用于检测宽屏iPhone 5,此宏适用于IOS 7:
#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )此宏也适用于宽屏iPone 5,但仅适用于IOS 8:
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )我需要将这些代码组合起来,使其在IOS 7和IOS 8上都能工作,为此,我需要选择器来检测IOS版本。
#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会使应用程序崩溃:”并给出了以下代码:
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“
@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上。
发布于 2014-12-16 10:22:53
您不需要使用操作系统来检测屏幕宽度。
只要包含正确的启动图像,您的应用程序将以正确的分辨率运行,您只需使用与ios7相同的屏幕边界即可。
我再次强调:包括正确的发射图像!然后使用UIScreen bounds
发布于 2014-12-16 01:52:49
当我需要一种快速而肮脏的方法来检测iOS7 7/8和iPhone/iPad设备时,我将使用以下宏:
#define IS_IOS8 ([[UIDevice currentDevice].systemVersion compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending)
#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)您可以使用以下宏:
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将知道方向,而纵向/景观中的高度将不同,因此可以检查这两种宏:
#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 ))发布于 2014-12-17 13:18:53
使用这个非常有用
#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)https://stackoverflow.com/questions/27496178
复制相似问题