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 上的后缀之前 - 与您的代码类似。

另一个丑陋的事情是 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 回答