来自 URL 视网膜大小的 iOS 图像?

Posted

技术标签:

【中文标题】来自 URL 视网膜大小的 iOS 图像?【英文标题】:iOS Image from URL Retina Size? 【发布时间】:2015-12-18 09:37:26 【问题描述】:

我想从 Web 服务加载一些不同大小(1x、2x 和 3x)的图标 - 但是,当最后没有带有 x2 的图像名称时,ios 总是将其用作 1x。

我已经找到了一些答案,您应该提供一个带有 imagename@2x.png 的 url - 以便 iOS 可以识别为 Retina Image,但是对于 3 种尺寸的远程图像应该如何正确工作?

在我的案例中,我有一个 Web 服务,它可以提供各种尺寸的图像。我想用 url 指定设备的正确尺寸。

例如:

http://example.com/x2/image.png

http://example.com/x3/image.png

通常生病使用 Images.xcassets 来提供所有不同的尺寸,但这次我想远程加载图像。如何检查所用设备的正确尺寸?我应该询问显示分辨率(或 iPhone 类型?)来检查应该加载哪个图像?

我怎么说 UIImageView 来自这个 Url 的图像:

http://example.com/x3/image.png

是 3 倍(所以不要渲染 3 倍大)?

提前致谢

【问题讨论】:

【参考方案1】:

使用[UIScreen mainScreen].scale 了解您需要的尺寸。然后使用此 API 加载图像:+ (nullable UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale。您可以指定图像的比例。

【讨论】:

【参考方案2】:

尝试使用

[UIScreen mainScreen].scale;

确定屏幕的比例。

迅速:

 UIScreen.mainScreen().scale

或者使用下面的代码:

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))
     // Retina display
else
    // non-Retina display

【讨论】:

【参考方案3】:

您可以定义一些宏,例如,

    #define iPad    UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

    #define iPhone5OrBelow ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height < 667)

    #define iPhone6 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 667)

    #define iPhone6Plus ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 736)

你可以检查这个宏中的任何一个,

if (iPhone6 || iPhone5OrBelow)

 // use @2ximage.png

else 

 // use @3ximage.png

我希望这会有所帮助。

【讨论】:

【参考方案4】:
You can check for iPhone.

For Ex :
if(iPHone5 || iPhone5S || iPhone6 || iPhone6S)
// load 2x images.
  use this link http://example.com/x2/image.png
  yourImgView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:yourLinkfor2ximage]];

  
  else if(iPhone6+ || iPhone6+S )
  //use this link http://example.com/x3/image.png
    yourImgView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:yourLinkfor3ximage]];
  

【讨论】:

以上是关于来自 URL 视网膜大小的 iOS 图像?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Retina 显示:图像双倍大小

用于视网膜显示的 uiwebview 中的 iOS 内容大小

iOS7 忽略视网膜 css 媒体查询 - 背景大小

为视网膜显示调整图像大小

视网膜图像的CSS调整大小

iOS - 图像视网膜模糊