【问题标题】:Does every CALayer have its own drawing context?每个 CALayer 都有自己的绘图上下文吗?
【发布时间】:2014-08-05 13:46:56
【问题描述】:

我有一个 UIView 子类,它绘制了一堆贝塞尔路径(通常大约 10-20 个)。目前我有一个 CALayer 做所有的绘图。现在我希望能够单独为所有线宽设置动画。我正在考虑使用一堆 CAShapeLayers,每个都只绘制一条贝塞尔路径。 CAShapeLayer 具有可设置动画的 lineWidth 属性。

我从这篇文章中得到了这个想法:Animating Pi Slices using a Custom CALayer

我担心这是否需要 10-20 倍的内存用于绘图,因为每个 CAShapeLayer 会创建一个单独的绘图上下文,或者它们是否都将绘制到相同的上下文中并共享内存?

【问题讨论】:

    标签: ios objective-c uiview core-graphics calayer


    【解决方案1】:

    只要它们位于视图层次结构中,它们就会在 GPU 上拥有单独的存储空间,除非随后出现内存不足警告。

    话虽如此,不要遭受过早优化的诅咒。如果这是表达动画的最简单、最直接的方式,那么它应该是你所做的。现在的手机和平板电脑有很多内存。

    【讨论】:

    • 有没有办法让它们进入相同的上下文?例如由视图或父层管理的上下文?
    • 这可能是表达动画的最简单方法,但是以每行需要单独的屏幕大小上下文为代价,我宁愿采用我认为的第二简单的方法。我说的是 10-20 条贝塞尔路径,但实际上没有上限。这取决于用户做什么。
    • 我不知道强制 CALayers 共享存储的方法;您可能想编写自己的 CALayer 子类,这样您仍然可以让 CoreAnimation 为您组织时间和进度。
    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多