0

configh.h

#define IS_IPHONE5  [[UIScreen mainScreen] bounds].size.height == 568

homeViewController.m

- ( void ) phoneType{

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if(result.height == 568){
            NSLog(@"iPhone 5");
            homeImg.image = [UIImage imageNamed:@"Background-Home.fw.png"];
            loginImg.image=[UIImage imageNamed:@"Background.fw.png"];
        }
        else{
            NSLog(@"iPhone 4S");
            homeImg.image = [UIImage imageNamed:@"Background-Home.png"];
            loginImg.image=[UIImage imageNamed:@"Background.png"];            
        }
    }

これは、iphone 4s と 5 の違いを見つける方法です。iphone 5 でこのコードを実行すると、iphone 4s が印刷されてログに記録されます。正しく実行されるようにコードを変更するにはどうすればよいですか

4

3 に答える 3

1

Default-568h@2x.pngこれは、少なくともアプリケーションに起動イメージを追加した場合にのみ機能します。それ以外の場合、これは常にfalseを返します。(起動画像がない場合、画面はレターボックス化されるため)

また、iPhone5のチェックを次のように変更することもできます

bool isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] 
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height * 
[[UIScreen mainScreen] scale]) >= 1136));

==および!=の浮動小数点の問題のため

于 2013-03-05T14:19:08.013 に答える
1

これを同じように試すことができます:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}
于 2013-03-05T14:16:28.210 に答える
0

C における数学の究極のルール:==および!=浮動小数点数を使用しないこと。期待どおりに動作しません。特定の値であることをチェックする代わりに、中間値よりも小さいか大きいかをチェックします。

IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height > 500)

また、マクロは常に括弧で囲むことをお勧めします。

于 2013-03-05T14:17:42.083 に答える