【问题标题】:CALayer loses rasterization when scrolled offscreen in a UIScrollView在 UIScrollView 中滚动到屏幕外时,CALayer 会失去光栅化
【发布时间】:2012-03-07 10:15:48
【问题描述】:

我有一些不错的自定义 UIView,它们使用 CALayers 制作一些相当精细的蒙版和透明胶片。我花了一段时间才弄清楚如何让它顺利运行,但我发现通过将相关对象包装在容器 UIView 中,并将容器的 layer.shouldRasterize 设置为 YES,但将所有包含视图的属性设置为 NO ,无论你的混合多么精细,它都会像黄油般顺滑。

基本上是这样的:

UIScrollView


容器视图(layer.shouldRasterize = YES)

  • 孩子(layer.shouldRasterize = NO)
    • childOfChild (layer.shouldRasterize = NO)
  • 孩子(layer.shouldRasterize = NO)
  • 孩子(layer.shouldRasterize = NO)

容器...

容器...(等等)


基本上,容器在栅格化时最终会形成一个大块图像,从而最大限度地减少必须完成的栅格化数量。然而,这给我带来了一个新的问题。如果我在 UIScrollView 中有多个容器,一旦其中一个容器滚动到屏幕外,它就会在 CoreAnimation 分析器中被标记为“红色”,因此当它滚动回屏幕时必须再次渲染。这会导致短暂的口吃。我不明白为什么容器的图层必须重新光栅化。任何人都可以解释这一点或提供解决方法吗?谢谢。

【问题讨论】:

    标签: ios uiscrollview calayer


    【解决方案1】:

    您可以保存图层的图像(假设渲染后不会更改),然后在静态 UIImage 之间滚动。

    要从 CALayer 创建 UIImage,请尝试 Todd Yandell 的解决方案:

    UIImage from CALayer - iPhone SDK

    或从 UIView 创建 UIImage 尝试 Tommy 的解决方案:

    How to capture UIView to UIImage without loss of quality on retina display

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2011-04-19
      • 2012-02-24
      相关资源
      最近更新 更多