ios - 实现 UIImage 问题的预期解决方案

标签 ios objective-c uiimage

我正在尝试创建自定义注释 View 。 我有一个 base.png 图像,其参数为 60x100 像素,分辨率为 72 像素/英寸。

在我的自定义Annotation对象中,我使用以下方法设置annotationView的图像:

-(MKAnnotationView *)annotationView
 {
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:@"MyAnnotation"];
annotationView.image = [UIImage imageNamed:@"base.png"];
return annotationView;
}

除了自定义注释 View 的解析之外,一切都按预期工作。它看起来像这样:customAnnotationView

虽然,原始图像看起来像这样:

enter image description here

正如您所看到的,它看起来尺寸过大,像素清晰可见。我没有任何前端经验可言,我不太了解分辨率以及 UIImage 如何通过调用 imageNamed 方法在后台设置图像。

这里有什么问题吗?我是否需要更高分辨率的图像开始或不同尺寸的图像或其他东西??? iOS 如何将原始 .png 图像(大小、分辨率等)转换为设备上实际显示的图像?

最佳答案

看看 Apple 的 high resolution resources网页。

本质上,这有两个部分。

  1. 您使用的是@2x 视网膜图像吗?您应该有一份名为 base@2x.png 的图像的双分辨率副本(在您的例子中为 120 x 200)。
  2. 除非您指定框架,否则 UIImageView 将自动采用其 image 属性的大小。

您的图钉和咖啡杯看起来像是两个不同的图像。我将从以双倍分辨率制作 base@2x.png 图像开始。当您编写代码时,您实际上并未指定图像的@2x 版本。你像你一样编码,iOS 将寻找 Retina 分辨率副本并神奇地加载它而不是标准分辨率。您将需要这两个图像,如下所示:

Retina and standard resolution

确保将它们都添加到您的项目中。在代码中,您将编写 [UIImage imageNamed:@"base.png"] 并且在 Retina 设备上,您将获得更清晰的图片版本。

至于咖啡在图钉上的偏移,您需要稍微调整该 View 的框架(或约束,如果您使用自动布局)。

关于ios - 实现 UIImage 问题的预期解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408752/

相关文章:

ios - 在 Xcode 中使用断点进行调试

ios - 如何在本地存储 UIImage 以避免不必要的服务器请求?

iphone - Json 解析 objective-c 中的 nil 字段

iOS 崩溃 libobjc.A.dylib objc_msgSend

ios - 使用动画动态地将行添加到 TableView 的末尾

ios - 如何在运行时增加 UITableview 中的行数?

ios - Objective-C UIScrollView 不滚动

ios - 降低 UIImage 的 DPI 分辨率

ios - 转换 base 64 时图像质量下降

ios - 在 iOS 中开始计时器倒计时