CALayer 中的性能滚动和视网膜分辨率图像

Posted

技术标签:

【中文标题】CALayer 中的性能滚动和视网膜分辨率图像【英文标题】:Performance scrolling and retina resolution images in CALayer 【发布时间】:2010-12-17 22:02:26 【问题描述】:

我有一个 UIView,它作为子视图放置在 UIScrollView 中。我在 UIView 中有几个由图像、文本和按钮组成的子视图。为了获得不错的滚动性能,我在 UIView 的图层上设置了shouldRasterize = YES。这在提高性能方面效果很好,因此我可以平滑滚动并且不会造成问题,因为我的图形在绘制后是静态的。但是,问题是当我设置 shouldRasterize 时,光栅化的图形在 Retina 显示器上是模糊且低分辨率的。有没有办法让高分辨率图形被光栅化以提高性能?

【问题讨论】:

【参考方案1】:

似乎我需要将 rasterizationScale 设置为设备的正确值,如下所示。

myView.layer.rasterizationScale = [[UIScreen mainScreen] scale];

【讨论】:

父层是否也需要使用相同的 rasterizationScale 还是没关系?【参考方案2】:

我遇到了类似的问题——旋转的UIView 带有几个UIImageView 子视图。当我设置rasterizationScale = 2.0 时,图像变得更清晰,但这导致锯齿重新出现。为了解决这个问题,我创建了一个 containerView 来保存 UIViewUIIMageViews(以前是 UIView 的子视图)并将 rasterizationScale = 1.0 应用于 UIViewrasterizationScale = 2.0UIImageViews .现在一切看起来都很好。

【讨论】:

我建议使用 timeuser 建议的更简单的解决方案。【参考方案3】:

@Jamie Hamick 在 Swift 5 中的回答:

myView.layer.rasterizationScale = UIScreen.main.scale

【讨论】:

以上是关于CALayer 中的性能滚动和视网膜分辨率图像的主要内容,如果未能解决你的问题,请参考以下文章

(快速问题)UITableViewCell 背景图像 - 保持视网膜图形的分辨率

视网膜显示屏,高分辨率背景图像

如何为所有 Android 分辨率准备图像?

iPhone 应用程序:视网膜显示的图像未显示

java9新特性-14-多分辨率图像 API

我需要为所有 iphone 制作应用程序的图像分辨率或大小? [复制]