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

Posted

技术标签:

【中文标题】在 iOS 的不同设备上为同一个项目使用不同的文件?【英文标题】:Using different files for the same project on different devices in iOS? 【发布时间】:2014-12-03 08:42:12 【问题描述】:

假设我有 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。

【问题讨论】:

与其检测模型,不如选择屏幕分辨率 我所有的视频都是 540 x 250 大小并且是嵌入的。 【参考方案1】:

您可以使用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"];

【讨论】:

我会选择这个作为正确答案,因为当我加载我的视频文件时,我必须相应地加载它们。谢谢你的准确回答。 希望能帮上忙。^_^【参考方案2】:

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

     - 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 将检测设备版本并选择相应的图像进行展示。

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

希望这会有所帮助。

【讨论】:

谢谢!我会看看它是否有效,因为另一个问题是,如果我想为 iPhone 6 plus 增加视频的大小,我是否必须为此使用 idiom。我想我会保持不变。 我认为您不需要任何视频文件的命名约定。它应该是一个适用于所有设备的文件。唯一的问题是您的视频应该是 H.264 视频,最高 1.5 Mbps。仍然不确定视频,但我认为它应该可以工作。【参考方案3】:

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

看看this

【讨论】:

谢谢,我会调查的。我认为这是合适的答案。

以上是关于在 iOS 的不同设备上为同一个项目使用不同的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:DecodeJpeg 方法在桌面和移动设备上为同一图像提供不同的像素值

NSFetchedResultsController OR 谓词在 iOS6 上为某些项目返回重复项

IOS-如何在情节提要上为通用设备的 UIscrollview 设置框架?

同一应用程序的不同 APN 设备令牌 ID

从 iOS 设备上为测试中的应用程序获取文件

iOS:尺寸等级不会因不同尺寸而改变