ios - CALayer 或其他技术来实际修改后面图层的颜色,就像剪裁一样

标签 ios uikit calayer

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


假设你有一个 View ,任何 View ,但让我们考虑一个恰好只是一些颜色 block 的 Collection View :

enter image description here

假设我们在顶部添加了一个 View ,CleverView,它要么只是阻止该 View (因此,白色 - 微不足道),要么甚至在该层“切开一个洞”(相对容易做到,谷歌).

到目前为止没问题:这里的 CleverView 只是一个白色方 block :

enter image description here

但是如果我们想这样做怎么办:

enter image description here

CleverView 正在改变它下面的所有饱和度,

或者也许是这样的:

enter image description here

CleverView 正在改变色调或其下方的任何内容。

请注意,在示例中它以像素方式工作,它不是(“只是”)标记每个 Collection View 单元格以更改所有单元格颜色。

因此,理想情况下,CleverView 会对其背后发生的任何事情执行此操作(即,它涵盖或部分涵盖的任何 View ,因此 Collection View 示例只是“许多 View ”)。

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

有什么方法可以在 iOS 中完成吗?

(在那个具体的例子中,我所做的只是,有两个 Collection View :底部的和顶部的有新的颜色值。只需小心地剪掉顶部的就可以达到效果。但显然那是不像实际“修改其后面所有像素的值”的 View 那样聪明。)

{另请注意,显然,您基本上可以制作一个屏幕截图,修改该图像并显示它;这不是一个很好的解决方案。

最佳答案

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

Special Considerations This property is not supported on layers in iOS.

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

我建议查看 SceneKit,那里的基元与 CoreAnimation 非常相似,也可以使用 CAAnimation 进行动画处理,但提供了高级工具配置和控制渲染的更多方面。

例如,SCNNode过滤器:https://developer.apple.com/documentation/scenekit/scnnode/1407949-filters?language=objc

关于ios - CALayer 或其他技术来实际修改后面图层的颜色,就像剪裁一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57756760/

相关文章:

cocoa - 根据点击位置丢弃 NSWindow 上的鼠标事件

ios - 在 UIbutton 中设置层外层?

ios - 使用 CL Location 的基于位置的应用程序。我的代码中的一行出现问题

iphone - Xcode:在最终的 iOS 应用程序中隐藏/保护资源文件?

ios - 如何以编程方式获取 iOS 设备 MAC 地址

iphone - 升级到 IOS5 - 应用程序无法构建

ios - 具有清晰背景的 UISlider 拇指图像在其后面显示轨道

ios - Swift:如何从 UITextField 中的建议电话号码自动填充中删除 "+"和国家代码

swift - 为什么这个快速按钮设置会崩溃?

ios - 如何像 iPad 时钟一样制作非常流畅的秒针动画(没有滴答声)