我试着为所有的IOS设备做通用的应用程序,除了下面的iPhone 4,我有这个宏可以在iOS8上工作:
#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;
}但这些宏不适用于iOS7来检测优化的图像。在这个论坛的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 )但是当我这样做的时候,应用程序崩溃了。
我需要添加什么才能使其正常工作?我是一个初级开发人员,不明白这个宏是如何工作的。
发布于 2014-12-08 16:33:01
宏IS_WIDESCREEN被正确写入,因为它询问系统是否可以响应消息-nativeBounds。
对于IS_IPHONE_6和5,你应该写一些像宽屏宏这样的东西,-nativeBounds只在iOS8中实现,这就是为什么如果你在iOS7上启动你的应用程序,它就会崩溃。
使用Xcode中的图像资源,您可以通过简单地创建一个图像资源来加载不同屏幕大小的不同图像,从而实现您想要的效果。
https://stackoverflow.com/questions/27343980
复制相似问题