【发布时间】:2020-09-16 00:35:04
【问题描述】:
我正在加载一个带有大约 6 个按钮的视图控制器,这些按钮已经定义了一个预设图像 - 我很好奇拥有一个将阴影添加到每个项目上的功能还是拥有一个更好(更快/更高效)的功能阴影已经在图像上,因此当图像分配给按钮时它已经存在。按钮现在在情节提要中设置了图像。
【问题讨论】:
我正在加载一个带有大约 6 个按钮的视图控制器,这些按钮已经定义了一个预设图像 - 我很好奇拥有一个将阴影添加到每个项目上的功能还是拥有一个更好(更快/更高效)的功能阴影已经在图像上,因此当图像分配给按钮时它已经存在。按钮现在在情节提要中设置了图像。
【问题讨论】:
不可能事先给图像添加阴影。阴影必须使用乘法混合模式(目标与阴影相乘),但图像的其余部分需要使用 alpha 混合(目标乘以图像蒙版的倒数,并添加到图像中,相乘)通过它的面具)。
您可以通过具有部分透明的阴影来模拟这一点,但这是一种不同的颜色:
shadow * α + destination * (1 - α)
而不是
shadow * destination
如果这看起来足够好,那么是的,它更有效。但这在今天(或昨天!)的硬件上无关紧要。
【讨论】:
简短:
在能源方面,在图像上放置阴影会更有效,因为无论如何您都需要加载它,从而节省了额外的阴影绘制。
之前看似无法理解的较长答案:
不需要额外 CPU 周期的一切都更好。特别是在位图最终将占用相同数量的内存的情况下。如果要为图像加载的数据要大得多,情况会有所不同。
这就是为什么 watchOS 应用使用预先计算好的动画图像,而不是在运行时绘制动画的原因。
【讨论】: