开发者

Retina display and [UIImage initWithData]

I need to initi开发者_StackOverflow社区alise images from raw data downloaded from a server which delivers the correct size of image based on the type of iPhone client.

I know that I should be setting the scale value to be 2.0 on the 640x960 display, however this is a readonly property and cannot be set during the init when using initWithData.

Any ideas?


I'm not aware of anything you can embed in the image data itself to tell the phone that it's a @2x image, but something like this should work:

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


Since iOS 6.0 UIImage has method + imageWithData:scale:, you can pass 2.0 as scale for retina.


You can pass [[UIScreen mainScreen] scale] as the scale parameter instead of 2.0f.


Swift3, 4 version

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


put this in your .m if you want or on an imported class (the syntax of c is nicer when calling the function IMAO)

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

Then when creating the image with the server data:

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


AFAIK you don't need to set the scale value yourself. The OS will handle the points to pixel translation for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜