如何在不同的设备(iphone 4s/5s/6/iPhone 6s)中获得真实的 image.size?

Posted

技术标签:

【中文标题】如何在不同的设备(iphone 4s/5s/6/iPhone 6s)中获得真实的 image.size?【英文标题】:How to get real image.size in diff devices(iphone4s/5s/6/iPhone6+)? 【发布时间】:2015-05-27 09:11:28 【问题描述】:

原图文件PX as (24*50);

文件名为

“icon_detail_black.png”

在我的项目中;

使用此代码:

image_ = [UIImage imageNamed:@"icon_detail_black"];

然后是 diff devices 中的结果:

iphone 4s image_.size = (24*50)

iphone 5s image_.size = (12*25)  

iphone 6 image_.size = (12*25)  

iphone 6+ image_.size = (8*16.666666667) 

为什么?

我们能得到真正的原始尺寸吗?

我想按原样 (24*50) 获取图像大小(原始图像大小)。有什么解决办法吗?谢谢

注意:

“icon_detail_black.png”文件与“@3x”文件一样, 我只是设置名称“icon_detail_black.png”, 我不想添加其他文件: “icon_detail_black.png”和 "icon_detail_black@2x.png"

我只想使用一个文件 (@3x) 而不是三个文件,然后使用比例图像在 iphone4s/5s/6+ 中显示所有差异设备。所以我需要获取原始图像大小。

解决方案 20150528

UIImage *image_s = [UIImage imageNamed:@"DefaultImage_JNYJScrollImage"];
CGSize size_ = image_s.size;
CGFloat float_ = image_s.scale;

size_.width =  size_.width*float_;
size_.height =  size_.height*float_;

谢谢大家。

【问题讨论】:

【参考方案1】:

文件名“icon_detail_black.png”导致 IDE 将此尺寸渲染为 1x。 当您移动到 ​​5 秒时,它会缩放到 2 倍的分辨率,然后缩放到 6 倍,同样,对于 6+,它会缩放到 3 倍。 您应该有一张 4s 的图像,一张以 @2x 结尾的 5s-6 图像和一张以 @3x 结尾的 6+ 图像,每个图像都具有适合设备的分辨率。

特别是对于您的情况,您应该:

"icon_detail_black.png" 24x50px "icon_detail_black@2x.png" 48x100px "icon_detail_black@3x.png" 72x150px

添加到您的项目(考虑到 24x50)是 1x 的分辨率

【讨论】:

这个“icon_detail_black.png”文件和“@3x”文件一样,我只是设置名称“icon_detail_black.png”,我不想添加其他文件:“icon_detail_black.png”和“icon_detail_black@2x.png”我只想使用一个文件(@3x)而不是三个文件,然后使用比例图像在 iphone4s/5s/6+ 所有差异设备中显示。所以我需要获取原始图像大小。 如果你只想使用1个文件,你只能将资源重命名为@3x,编译器自己调整大小。 2 Vlad:我也这样做了,但结果都一样。【参考方案2】:

为 1x 、 2x 和 3x 命名图标,如图所示:

icon_detail_black-50w (@1x) icon_detail_black-100w (@2x) icon_detail_black-150w (@3x)

然后弄清楚你在运行时需要什么图像:

    NSNumber *screenWidth   = @([UIScreen mainScreen].bounds.size.width);
    NSString *imageName   = [NSString stringWithFormat:@"name-%@w", screenWidth];
    UIImage *image        = [UIImage imageNamed:imageName];

【讨论】:

【参考方案3】:

4 详情:见问题详情:

UIImage *image_s = [UIImage imageNamed:@"DefaultImage_JNYJScrollImage"];
CGSize size_ = image_s.size;
CGFloat float_ = image_s.scale;

size_.width =  size_.width*float_;
size_.height =  size_.height*float_;

【讨论】:

以上是关于如何在不同的设备(iphone 4s/5s/6/iPhone 6s)中获得真实的 image.size?的主要内容,如果未能解决你的问题,请参考以下文章

为不同的设备/分辨率使用不同的图像,例如如何使用波浪号 (~) 来区分 iPhone 和 iPad?

如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?

请问电脑PC自带IE浏览器和 苹果IPHONE或者安卓手机打开同一域名网站时,分别显示不同内容,代码如何修改,

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

如何在情节提要中使用自动布局在不同设备尺寸上设置动态位置的约束

iPhone - 如何在运行时检测到设备正在运行我的应用程序的临时构建