对于子视图加到父视图这样的操作,作为IOS coder来说一天会写很多次,但是如果二个view不同颜色的话,你知道背后发生了什么吗?这儿不讨论复杂的图像合成,只是讨论下如何得出合成后的颜色取值。原文link: https://objccn.io/issue-3-1/
1. 有二个view: view1(父视图 ==>红色) ,view2(子视图 ==>蓝色), 完全相同的bounds使用重叠
2. 重叠后的颜色取值计算:
R = S + D * (1 -Sa) ,这是源文给的计算公式,我翻译了一下帮助理解。
Result = subview * subview.alpha + superView *superView.alpha * (1 - subview.alhpa)
3. 按上面公式来说,如果二个view的alpha值都为1的话,那么result = subview 的颜色也就是蓝色
4. 如果二个alpha都不为1的情况下,GPU就得帮我们计算新值了,对一个像素计算一次,一个640*1136的要在1/60秒内计算XX次,可见一个alpha值的影响还是很大的。
结论:对于没有必要设置alpha的view,保持其值为1,可以省掉GPU的大量工作。
PS: 如果是有很多很多子view呢?这个工作量是有多大,所以我们尽量少重叠view吧。