CALayer或其他技术来实际修改后面各层的颜色,就像裁剪

时间:2019-09-02 12:12:47

标签: ios uikit calayer

总结,在iOS中,如何拥有一个修改其后所有视图像素的视图。


假设您有一个视图以及所有视图,但让我们考虑一个碰巧只是一些色块的集合视图:

enter image description here

假设我们在顶部添加了一个视图,即 CleverView ,它只是阻止了该视图(因此,白色-微不足道),甚至在该层中“切了一个洞”(相对容易做到,google )。

到目前为止没有问题:所以这里的CleverView只是一个白色正方形:

enter image description here

但是,如果我们想要这样做:

enter image description here

CleverView会更改其下方的所有饱和度,

或者也许是这样

enter image description here

CleverView正在更改色相或其下方的任何内容。

请注意,在示例中,它是以像素方式工作的,并不是(只是)标记每个收集视图单元格来更改所有单元格颜色。

因此,理想情况下,CleverView可以对碰巧在其后面的所有内容执行此操作(即,它涵盖或部分涵盖的任何视图,因此,集合视图示例只是“许多视图”。)

自然,下面的东西和CleverView的形状都可以实时地动画,移动。

有没有办法在iOS中完成?

(在那个特定的示例中,我要做的只是拥有两个集合视图:底部的视图和顶部的视图具有新的颜色值。只需小心地剪辑顶部的视图即可达到这种效果。但是显然并不像实际上“修改其后所有像素的值”的视图那样聪明。)

{也请注意,很明显,您基本上只能制作一个屏幕快照,修改该图像并显示它;并不是一个很好的解决方案。}

1 个答案:

答案 0 :(得分:1)

CALayer有一个属性backgroundFilters,您通常可以在其中添加一个CIFilter来完成这项工作。但是,文档指出

  

特殊注意事项该属性在以下图层中不受支持   iOS。

这很烦人,但这就是我们所拥有的。可能是出于性能方面的考虑。

我建议您研究SceneKit,那里的原语与CoreAnimation非常相似,也可以用CAAnimation进行动画处理,但是提供了高级工具来配置和控制渲染。

例如,SCNNode具有filtershttps://developer.apple.com/documentation/scenekit/scnnode/1407949-filters?language=objc