新しい画面サイズと解像度のiPhone5がリリースされました。
IPhone 4(網膜)用の画像を使用した場合、画像名に「@ 2x」を追加しました。誰か教えてもらえますか?新しいiPhone画面に別の画像(背景、ボタンなど)を追加することは可能ですか?
そして2番目の質問:アプリに別々のXIBファイルを含めることはできますか:古いiPhoneの場合、新しいiPhoneの場合(iPhoneやiPadなど)?
ありがとうございました!
これは、この主題に関する私のブログからの例外です:
[UIImage imageNamed:] Retinaデバイスで実行すると、@ 2xバージョンの画像が自動的に読み込まれます。残念ながら、imageNamed:は、iPhone 5で実行している場合、-568h @ 2xバージョンの画像を自動的にロードしません。
これが問題にならない場合もあります。たとえば、iPhone 4と5ではアイコンとフルスクリーン以外のグラフィックが同じである可能性があります。ただし、フルスクリーンの背景画像やツールバーの全幅/高さの背景画像などがある場合は問題があります。高さ480の画像は、おそらく引き伸ばされます(結果として恐ろしく見えるでしょう)。
画面サイズを手動で確認し、次のように適切な画像を読み込むことができます。
UIImage* myImage;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
myImage = [UIImage imageNamed:@"myImage-568h.png"];
} else {
myImage = [UIImage imageNamed:@"myImage.png"];
}
UIImage imageNamedを変更して、が自動的に正しい画像をロードするようにする方法があります。詳細については、以下のリンクを参照してください。
詳細: http://pervasivecode.blogspot.co.uk/2012/09/making-apps-work-on-iphone-5-screen-size.html
編集:@Sound Blaster&@ GrizzlyNetchare正しい、コードではimageNamed:@ "myImage-568h.png"]を使用する必要がありますが、実際のファイル名は[email protected]である必要があります。これを行わないと、彼らが言ったように、スケールが正しくありません。
IPhone 5には新しいピクセル密度が導入されていないため、以前に使用したすべての網膜画像を使用できます。
IPhone 5の新しい解像度をサポートするために必要なのは、ビューがウィンドウを上に表示するようにすることだけです。テーブルビューやスクロールビューなどのほとんどのビューでは、これによって問題が発生することはありません。
また、新しい解像度のために追加のXIBファイルを追加する必要はありません。これもサポートされていません。
[email protected]
をアプリバンドルに追加するだけで、iOS6でアプリがiPhone5で利用可能な余分なスペースを占有するようになります。
タブバーなどのすべてのネイティブコントロールは、期待どおりに動作します。
アプリでiOS4.3および5. *をサポートする場合は、nib設定(Interface Builderの最初のタブ)のUse Autolayout
がオフになっていることを確認してください。
次に、ビューが正しく設定されていることを確認します autoresizingMask
編集
注意、iOS8 UIScreenの時点では、向きが考慮されています(高さを確認すると、縦向きの高さのみになる前に、縦向きの高さまたは横向きの高さの2つの値を返すことができます)が、xcassetsの方が優れています。ここで確認できます: iphoneの背景を追加する方法は?
編集終了
ベンクレイトンの回答に基づいて、iPhone5の画像を管理するための便利なカテゴリを作成しました。ありがとうございます。
+ (UIImage *) imageForName:(NSString *)imageName
{
NSString *result = imageName;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
BOOL isIphoneFive = ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f);
if (isIphoneFive)
{
NSString *imageNameWithoutExtension = [imageName stringByDeletingPathExtension];
NSString *extension = [imageName pathExtension];
result = [NSString stringWithFormat:@"%@-568h.%@",imageNameWithoutExtension, extension];
}
return [UIImage imageNamed:result];
}
if([UIScreen mainScreen] .scale == 2.f && screenHeight == 568.0f)浮動小数点数の正確な比較は、メモリへの格納方法に丸め誤差があるため、どの言語でもお勧めできません。たとえば、568.0fが567.9999999または568.0000001として保存されないことを保証することはできません。範囲を使用する方がはるかに安全です。この場合、screenHeight> 567.1fで十分です。 iPhoneでさえ物理的にピクセルの一部をサポートしていないのではないかと思います。
私は現在、現在のデバイスがこの方法で4インチのiPhoneであるかどうかを検出しており、うまく機能します。hth
- (BOOL)isiPhone5{
return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0);
}