6

iOSリファレンスライブラリによると:

iOS 4.0以降では、個々のリソースファイルを特定のタイプのデバイスでのみ使用可能としてマークすることができます。

これは、3.Xデバイス、特に3.2 iPad用のユニバーサルアプリを作成している場合、およびサフィックスでデバイス固有のリソースを使用できないことを意味し~ipadます~iphoneか?

もしそうなら、これはデバイス固有のリソースを処理する正しい方法ですか?

UIImage* anImage;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    anImage = [UIImage imageNamed:@"MyImage-iPad.png"];
} else {
    anImage = [UIImage imageNamed:@"MyImage-iPhone.png"];
}  

知っておくべき追加の考慮事項はありますか?

4

1 に答える 1

2

はい、その通りです。その機能は現在のiPad(iOS 3.2)では機能しません。

回避策として、UIImageでカテゴリを作成したので、のように使用できますanImage = [UIImage mbImageNamed:@"MyImage.png"]。カテゴリメソッドは、iPadのサフィックスの前に「〜iPad」を付けるだけです-あなたと同じようなコードです。

もう1つの醜い点は、UIWindowControllersがデバイスによってはxibファイルをロードしないことです。すべてのウィンドウコントローラーの基本クラスを作成し、iPad固有のXIBをロードしました。

@implementation MBPadAwareWindowController
- (id)init
{
    NSString *className = NSStringFromClass([self class]);
    NSString *nibName = UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad ? className : [className stringByAppendingFormat:@"-iPad"];
    return [self initWithNibName:nibName bundle:nil];
}
@end
于 2010-10-17T12:31:03.260 に答える