Skip to content

Commit

Permalink
update 图层性能
Browse files Browse the repository at this point in the history
  • Loading branch information
pro648 committed Feb 23, 2021
1 parent ca6cb99 commit c421f7b
Showing 1 changed file with 3 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

## 1. 隐式绘制 Inexplicit Drawing

图层的 backing image 可以使用 Core Graphics 绘制,或为`contents`属性赋值图片,或在离屏的`CGContext`提前渲染。之前的文章已经介绍过了这些场景的优化,但还可以通过以下三种方式创建
图层的 backing image 可以使用 Core Graphics 绘制,或为`contents`属性赋值图片,或在离屏的`CGContext`提前渲染。之前的文章已经介绍过了这些场景的优化,但还可以通过以下三种方式优化

- 修改图层属性。
- 使用特殊视图。
Expand Down Expand Up @@ -62,7 +62,7 @@ Core Graphics、CoreText 的任何绘制方法,都会分配单独内存,不

![Painter'sAlgorithm](images/CAPainter's_algorithm.svg)

上层会覆盖底层,被遮盖部分像素数据永久丢失。此时不能通过修改当前层的某一部分,让地下的层重新显示出来
上层会覆盖底层,被遮盖部分像素数据永久丢失。此时不能通过修改当前层的某一部分,让底下的层重新显示出来

如果能在 frame buffer 之外另开启一块内存,把待处理的 layer 先画上去,然后在这块临时区里执行擦除、修改工作,处理完毕再写回到 frame buffer,得到最终结果。虽然这种方法需要额外空间,但得到了更大的灵活性。

Expand All @@ -88,7 +88,7 @@ Core Graphics、CoreText 的任何绘制方法,都会分配单独内存,不

有时需要显示圆角矩形并裁减超出边界的子图层,但有时不需要裁减圆角,这时使用`CAShapeLayer`可以避免离屏渲染问题。

使用`UIBezierPath``init(roundedRect:byRoundingCorners:cornerRadii:)`创建左上角、右下角圆角的巨型
使用`UIBezierPath``init(roundedRect:byRoundingCorners:cornerRadii:)`创建左上角、右下角圆角的矩形

```
let blueLayer = CAShapeLayer()
Expand Down

0 comments on commit c421f7b

Please sign in to comment.