ios - CALayer 或其他技术来实际修改后面图层的颜色,就像剪裁一样
问题描述
总结一下,在 iOS 中如何有一个视图来修改它后面所有视图的像素。
假设您有一个视图,任何视图,但让我们考虑一个恰好是一些色块的集合视图:
假设我们在顶部添加了一个视图CleverView,它要么只是阻止该视图(所以,白 - 微不足道),甚至在该层“切一个洞”(相对容易做到,谷歌)。
到目前为止没问题:所以这里的 CleverView 只是一个白色方块:
但是如果我们想这样做怎么办:
CleverView 正在改变它下面的所有饱和度,
或者也许是这样:
CleverView 正在改变色调或它下面的任何东西。
请注意,在示例中它以像素方式工作,它不是(“只是”)标记每个集合视图单元格以更改所有单元格颜色。
所以理想情况下,CleverView 会对它后面发生的任何事情执行此操作(即,它覆盖或部分覆盖的任何一堆视图,因此集合视图示例只是“许多视图”)。
自然地,下面的东西和 CleverView 的形状都可以实时动画、移动。
有没有办法在iOS中完成?
(在那个具体的例子中,我所做的只是,有两个集合视图:底部的一个和顶部的具有新的颜色值。只需小心地剪辑顶部的一个即可达到效果。但显然这不是聪明的作为实际上“修改其后面所有像素的值”的视图。)
{还要注意,很明显,您基本上可以只制作一个屏幕截图,然后显示该图像并显示它;不是一个很好的解决方案。}
解决方案
CALayer
有一个属性backgroundFilters
,您通常可以在其中添加一个可以完成这项工作的属性CIFilter
。但是,文档指出
特殊注意事项 iOS 中的图层不支持此属性。
这很烦人,但这就是我们所拥有的。可能是出于性能考虑。
我建议研究一下SceneKit
,那里的原语与 非常相似CoreAnimation
,也可以动画CAAnimation
化,但提供了高级工具来配置和控制渲染的更多方面。
例如SCNNode
有filters
:https ://developer.apple.com/documentation/scenekit/scnnode/1407949-filters?language=objc
推荐阅读
- python - Python中的高斯RBF可视化
- css - 如何放大页面而不在页面的父组件(主组件)中显示滚动
- flutter - 如何解决flutter应用程序http请求错误
- jquery - 如何在具有相同数据的数据表中隐藏重复的单元格数据?
- python - 在 Python 中处理重复的 ZeroDivision 异常的最佳实践是什么?
- python - Pygame 输出:黑色背景
- python - 从其他文件夹导入模块:如何在 Spyder 或 PyCharm 中显示函数参数?
- sql - 如何使用 SQL 从 Spark 中的另一个 TABLE 中使用 SELECT 创建一个 TABLE
- java - 如何记住用户的详细信息以避免每次在 JavaFx 桌面应用程序中要求他登录
- scala - 如何将此数据集转换为以下数据集