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
来保存 UIView
和 UIIMageView
s(以前是 UIView 的子视图)并将 rasterizationScale = 1.0
应用于 UIView
和 rasterizationScale = 2.0
到 UIImageView
s .现在一切看起来都很好。
【讨论】:
我建议使用 timeuser 建议的更简单的解决方案。【参考方案3】:@Jamie Hamick 在 Swift 5 中的回答:
myView.layer.rasterizationScale = UIScreen.main.scale
【讨论】:
以上是关于CALayer 中的性能滚动和视网膜分辨率图像的主要内容,如果未能解决你的问题,请参考以下文章