iPhone中的设备专用资源

hpi*_*que 6 iphone resources universal-binary ipad ios

根据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"];
}  
Run Code Online (Sandbox Code Playgroud)

我应该知道的任何其他考虑因素?

Mic*_*hal 2

是的,你是对的,该功能不适用于当前的 iPad - iOS 3.2。

作为解决方法,我在 UIImage 中创建了一个类别,因此我可以像anImage = [UIImage mbImageNamed:@"MyImage.png"]. 类别方法只是将“~iPad”放在 iPad 上的后缀之前 - 代码与您的类似。

另一个丑陋的事情是 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
Run Code Online (Sandbox Code Playgroud)