似乎无法区分iPad Retina或标准版(原创)

时间:2014-05-26 05:49:29

标签: ios objective-c xcode ipad cocos2d-iphone

我目前使用代码来改变我的cocos2d图层菜单背景的图片,以便它适合屏幕的边界......

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        //iPhone Classic (3gs)
        NSLog(@"Currently running iPhone Classic Code Block----------");
        background.scale = 0.5; // May need changing once using retina mode!!!
    }
    else if(result.height == 568)
    {
        // iPhone 5
        NSLog(@"Currently running iPhone 5 Code Block---------");
        background.scale = 0.6; // May need changing once using retina mode!!!
    }
}

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 1024)
    {
        //iPad Classic
        NSLog(@"Currently running iPad Classic Code Block--------");
        background.scale = 1.2;
    }
}

然而,这很有效,我似乎无法区分iPad视网膜或原始...

他们都报告他们的高度为1024,但是当并排跑时,背景明显是另一半的一半。如果我增加background.scale它将适合那个,但后来两个大的另一个......

我该如何纠正这个?感谢...

2 个答案:

答案 0 :(得分:1)

要区分视网膜和非视网膜,您应该使用屏幕的缩放属性。

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
    // It's retina!
}

由于此属性是在iOS的更高版本中添加的,因此您应该询问该属性是否存在(因此respondsToSelector

答案 1 :(得分:1)

以下是检测视网膜和标准显示的简单代码:

if([UIScreen mainScreen].scale>1.0)
{
nslog(@"Retina");
}else
{
nslog(@"NONRetina");
}