- 颜色复制的图像。 在被核心动画复制的图像上放置青色叠加层。
但这并没有解释为什么一个图像会被复制。从一个被复制的图像到另一个被复制的图像似乎没有明显的模式,尽管这是规律和可重复的。
目前的文档甚至没有提到Color Hits Green and Misses Red,但我认为它可能与CALayer
的shouldRasterize
属性有关。
有任何想法吗?
- 颜色复制的图像。 在被核心动画复制的图像上放置青色叠加层。
但这并没有解释为什么一个图像会被复制。从一个被复制的图像到另一个被复制的图像似乎没有明显的模式,尽管这是规律和可重复的。
目前的文档甚至没有提到Color Hits Green and Misses Red,但我认为它可能与CALayer
的shouldRasterize
属性有关。
有任何想法吗?
如果图像由自定义数据提供者支持或无法映射到另一个进程中,那么它们可以被复制。
iOS调试核心动画工具
良好的实践是:
真机 -> 概要 -> 核心动画 FPS
核心动画工具
模拟器 -> 调试:
颜色混合图层
(过度绘制
, 颜色混合) [绿色, 红色]在单个渲染帧中,同一像素被绘制多次
如果是红色,则应用颜色混合。当有像素带有alpha通道时,计算正确的结果像素颜色并不是一项简单的任务。
[iOS alpha vs opacity vs opaque]
使用案例:
UIView.layer.cornerRadius
应用颜色混合。这意味着额外的带有alpha的图层被应用要解决此问题,您可以:
-使用遮罩(关闭离屏渲染的颜色
将被应用)
-添加带有圆角的额外图层
UILableView
- 背景颜色是透明的UIImage
带有alpha通道(可在 UIImageView
中使用)为了避免颜色混合:
-平面视图层次结构
-减少透明度
复制的颜色图片
[蓝色, 默认]如果是蓝色,则从GPU复制图像到CPU,因为GPU不支持此颜色格式。例如,您可以创建一个大的imageview并设置 .pdf
图像。
imageView.image = UIImage(named: "ring")
颜色不对齐的图像
[黄色,默认]图像大小与imageView大小不相等。由于需要额外的工作来压缩图像。
离屏渲染的颜色不正确
[黄色,默认]如果是黄色-层被离屏渲染。例如mask
,shadow **without** path
,cornerRadius
,使用CGContext进行自定义绘制,drawRect
等。
真实设备另外还有:
Xcode(13.3.1) -> Debug -> View Debugging -> Rendering
命中绿色和未命中红色的颜色
[绿色,红色,默认]显示shouldRasterize = true
会产生负面影响。绿色-成功缓存,红色-缓存重新生成。只有频繁的再生成才会影响性能。
图层格式的颜色
(非标准表面格式的颜色)
未记录立即着色
默认情况下,Core Animation Instruments
每10毫秒更新一次调试有颜色的图层。此设置将其设置为每帧更新,这对性能和准确性有一定影响。
复合快速路径蓝色
(颜色OpenGL快速路径蓝色) [蓝色,红色,默认]用OpenGL直接绘制在屏幕上的图层会被突出显示(蓝色),这是最佳实践。如果您使用OpenGL并且看不到蓝色,则意味着您正在进行额外的工作。
闪存更新区域
[黄色,默认]黄色是更新(重绘)的区域。最简单的场景是查找不必要的效果。