在 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.gif
、iPhone6Plus.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 上为某些项目返回重复项