【发布时间】:2014-12-07 15:05:14
【问题描述】:
我试图为所有 IOS 设备制作通用应用程序,除了 iPhone 4 以下,我有这个适用于 IOS 8 的宏:
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )
#define IS_IPHONE_6 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1334 ) < DBL_EPSILON )
这是我正在使用的代码:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
SKSpriteNode *background;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
if (IS_IPHONE_6) {
background = [SKSpriteNode spriteNodeWithImageNamed:@"Background-667"];
}
else if (IS_IPHONE_5) {
background = [SKSpriteNode spriteNodeWithImageNamed:@"Background-568"];
}else{
background = [SKSpriteNode spriteNodeWithImageNamed:@"Background"];
}
}else{
background = [SKSpriteNode spriteNodeWithImageNamed:@"Background~iPad"];
}
background.anchorPoint = CGPointMake(0.5, 1);
background.position = CGPointMake(self.size.width/2, self.size.height);
[self addChild:background];
}
return self;
}
但这些宏不适用于 IOS 7 检测优化图像。 在这个论坛How to detect iPhone 5 (widescreen devices)? 他们说你需要把这个代码,它会工作
#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 )
但是当我这样做时,应用程序崩溃了。
我需要添加什么才能使其正常工作?我是初学者,不明白这个宏是如何工作的。
【问题讨论】:
-
nativeBounds是在 iOS 8 中添加的,这就是它在 iOS 7 中崩溃的原因。 -
您在项目中添加启动图像? .如果否,则将启动图像添加到您的项目中,然后运行..
-
@Milanpatel 启动图像与 iOS 7 下的崩溃有什么关系?