OStack程序员社区-中国程序员成长平台

标题: iOS ScrollView 在非事件和滚动正常图像上具有灰度图像 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:33
标题: iOS ScrollView 在非事件和滚动正常图像上具有灰度图像

声明

ScrollView 中的图像在 ScrollView 滚动时将获得颜色,并在滚动结束或不滚动后变为灰度。

ScrollView 中的内容

ScrollView 将 UIViewUIImage 作为直接后代。图像可能包含在每个 UIView 中,也可能不包含。每个 UIView 可能有文本、文本和图像以及图像。

图像分辨率

图像分辨率会很小,例如 300x150450x150

我们做了什么?

我们遇到了GPUImage框架由 Brad Larson .该框架至少可以说令人印象深刻,我们一直对框架提供的一切着迷。

我们对框架性能的初步测试令人满意。

我们已经设法使用 GPUImageGrayscaleFilter 将图像插入到 ScrollView 中时将其转换为灰度图像。

优化

我们决定对 ScrollView 中可见的图像应用过滤器。这将大大减少负载

我们现在卡在哪里了?

有两种方法可以让图像恢复颜色

  1. 从 UIImage 中移除 GPUImageGrayscaleFilter我们无法做到这一点
  2. 删除 UIImage 并插入原始图像。正在使用 NSURLRequestReturnCacheDataElseLoad 的缓存策略下载图像。 插入下载的图片不会有问题。

无论哪种方式,我们都会应用过滤器并多次插入相同的图像。我们不确定这部分。我们错过了一个简单的技巧吗?

我要提前感谢大家的时间和回复

更新和解决方案

我能够使用 GPUImage 实现这一点。

涉及的步骤

  1. 将正常图像分配给 UIButtonUIControlStateNormal 并将灰度转换图像从 GPUImageGrayScaleFilter 分配到 UIControlStateHighlighted
  2. 当您希望图像获得颜色时触发状态更改
  3. 当您希望图像变灰时触发状态更改

这个轮播的表现非常流畅。开始时 GPU Time Elapsed 配置文件出现峰值,但之后绝对为零。

随着测试的进行,我会更新分析统计数据。

谢谢大家。



Best Answer-推荐答案


如果您的图像数量有限,您可以下载普通图像,创建灰度副本并将两者保存到磁盘。 在 ScrollView 中,使用具有自定义类型和清晰背景颜色的 UIButton 而不是 UIImageView。 UIButton 允许您为不同的控件状态设置不同的图像。 设置正常和选择/禁用状态的正常和灰度图像。对于不需要图像的 View ,只需不要设置图像。 当滚动开始和结束时,在委托(delegate)中更改按钮的状态。

附: :您是否考虑过 ScrollView 的更复杂的后代“UITableView”和“UICollectionView”,而不是使用简单的 ScrollView ?它们将为您节省大量与滚动相关的代码和时间。

关于iOS ScrollView 在非事件和滚动正常图像上具有灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773232/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4