在iOS中的不同设备上为同一项目使用不同的文件?

时间:2014-12-03 08:42:12

标签: ios objective-c iphone ipad

假设我有3个动画文件,大小适合iPhone 5s,iPhone 6和iPhone 6 Plus。那么ipad呢?

对于相同的视图控制器,我应该如何将这些相应的文件用于不同的iPhone大小。这是一个具体的例子:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@”iphone5s” ofType:@”gif”];

但如果我想加载iPhone 6,iPhone 6 plus,名为iPhone6.gifiPhone6Plus.gif等,该怎么办

我正在使用Objective-C。

3 个答案:

答案 0 :(得分:2)

您可以使用SDVersion来检测当前的device信息。 SDVersion是:

Objective-C库,用于检测正在运行的设备的型号和屏幕尺寸

因此,您可以使用它来获取设备型号设备屏幕尺寸设备名称 iOS版本如下:

  // Check for device model
  if ([SDVersion deviceVersion] == iPhone6)
       NSLog(@"You got the iPhone 6. Sweet !");
  else if ([SDVersion deviceVersion] == iPhone6Plus)
       NSLog(@"iPhone 6 Plus? Bigger is better!");
  else if ([SDVersion deviceVersion] == iPadAir2)
       NSLog(@"You own an iPad Air 2 !");

  // Check for device screen size
  if ([SDVersion deviceSize] == iPhone4inch)
       NSLog(@"Your screen is 4 inches");

  // Get device name
  NSLog(@"%@", stringFromDeviceVersion([SDVersion deviceName]));
  /* e.g: Outputs 'iPhone 6 Plus' */

  // Check for iOS Version
  if (iOSVersionGreaterThanOrEqual(@"8"))
       NSLog(@"You are running iOS 8 or above!");

在您的情况下,您可以:

NSString *name;
DeviceSize size = [SDVersion deviceSize];

if (size == iPhone35inch)
    name = @"iPhone4";
else if(size == iPhone4inch)
    name = @"iPhone5";
else if(size == iPhone47inch)
    name = @"iPhone6";
else if(size == iPhone55inch)
    name = @"iPhone6Plus";
else
    name = @"iPad";


NSString *filePath = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"];

答案 1 :(得分:1)

尝试使用具有适当命名约定的特定图像文件名。像,

     - fileName.png -> iPhone (non-retina/fallback)
     - fileName@2x.png -> iPhone (retina)
     - fileName@3x.png -> iPhone 6 Plus (retina)
     - fileName~ipad.png -> iPad (non-retina)
     - fileName@2x~ipad.png -> iPad (retina)

So, in code we can use:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@”fileName” ofType:@”png”];

内部OS将检测设备版本并选择要展示的相应图像。

我使用了故事板图像分配,我没有试过代码库,但是你可以尝试一下。

希望这有帮助。

答案 2 :(得分:0)

您可以使用sys/utsname.h中的uname获取设备型号。

查看this