Retina显示和[UIImage initWithData]

时间:2010-07-20 11:07:37

标签: iphone cocoa-touch uiimage

我需要从服务器下载的原始数据初始化图像,该服务器根据iPhone客户端的类型提供正确的图像大小。

我知道我应该在640x960显示器上将比例值设置为2.0,但这是一个只读属性,在初始化期间使用initWithData时无法设置。

有什么想法吗?

6 个答案:

答案 0 :(得分:93)

我不知道你可以嵌入到图像数据中的任何东西告诉手机它是一个@ 2x图像,但这样的东西应该有用:

UIImage * img = ...;
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation];

答案 1 :(得分:19)

由于iOS 6.0 UIImage包含方法+ imageWithData:scale:,因此您可以将2.0作为视网膜的比例传递。

答案 2 :(得分:7)

您可以将[[UIScreen mainScreen] scale]作为比例参数而不是2.0f

答案 3 :(得分:0)

Swift3,4版

let image = UIImage(data: imageData, scale: UIScreen.main.scale)

答案 4 :(得分:-1)

如果你想要或在导入的类上将它放在.m中(调用函数IMAO时c的语法更好)

BOOL isRetina(){
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        return [[UIScreen mainScreen] scale] == 2.0;
    }
    return NO;
}

然后在使用服务器数据创建图像时:

[UIImage imageWithData:dataFromServer scale:isRetina()?2:1];

答案 5 :(得分:-4)

AFAIK您无需自行设置比例值。操作系统将为您处理像素转换。