每个 CALayer 都有自己的绘图上下文吗?
Posted
技术标签:
【中文标题】每个 CALayer 都有自己的绘图上下文吗?【英文标题】:Does every CALayer have its own drawing context? 【发布时间】:2014-08-05 13:46:56 【问题描述】:我有一个 UIView 子类,它绘制了一堆贝塞尔路径(通常大约 10-20 个)。目前我有一个 CALayer 做所有的绘图。现在我希望能够单独为所有线宽设置动画。我正在考虑使用一堆 CAShapeLayers,每个都只绘制一条贝塞尔路径。 CAShapeLayer 具有可设置动画的 lineWidth 属性。
我从这篇文章中得到了这个想法:Animating Pi Slices using a Custom CALayer。
我担心这是否需要 10-20 倍的内存用于绘图,因为每个 CAShapeLayer 会创建一个单独的绘图上下文,或者它们是否都将绘制到相同的上下文中并共享内存?
【问题讨论】:
【参考方案1】:只要它们位于视图层次结构中,它们就会在 GPU 上拥有单独的存储空间,除非随后出现内存不足警告。
话虽如此,不要遭受过早优化的诅咒。如果这是表达动画的最简单、最直接的方式,那么它应该是你所做的。现在的手机和平板电脑有很多内存。
【讨论】:
有没有办法让它们进入相同的上下文?例如由视图或父层管理的上下文? 这可能是表达动画的最简单方法,但是以每行需要单独的屏幕大小上下文为代价,我宁愿采用我认为的第二简单的方法。我说的是 10-20 条贝塞尔路径,但实际上没有上限。这取决于用户做什么。 我不知道强制 CALayers 共享存储的方法;您可能想编写自己的 CALayer 子类,这样您仍然可以让 CoreAnimation 为您组织时间和进度。以上是关于每个 CALayer 都有自己的绘图上下文吗?的主要内容,如果未能解决你的问题,请参考以下文章