声明
ScrollView 中的图像在 ScrollView 滚动时将获得颜色,并在滚动结束或不滚动后变为灰度。
ScrollView 中的内容
ScrollView 将 UIView 和 UIImage 作为直接后代。图像可能包含在每个 UIView 中,也可能不包含。每个 UIView 可能有文本、文本和图像以及图像。
图像分辨率
图像分辨率会很小,例如 300x150、450x150
我们做了什么?
我们遇到了GPUImage框架由 Brad Larson .该框架至少可以说令人印象深刻,我们一直对框架提供的一切着迷。
我们对框架性能的初步测试令人满意。
我们已经设法使用 GPUImageGrayscaleFilter 将图像插入到 ScrollView 中时将其转换为灰度图像。
优化
我们决定对 ScrollView 中可见的图像应用过滤器。这将大大减少负载
我们现在卡在哪里了?
有两种方法可以让图像恢复颜色
- 从 UIImage 中移除
GPUImageGrayscaleFilter 。 我们无法做到这一点。
- 删除
UIImage 并插入原始图像。正在使用 NSURLRequestReturnCacheDataElseLoad 的缓存策略下载图像。 插入下载的图片不会有问题。
无论哪种方式,我们都会应用过滤器并多次插入相同的图像。我们不确定这部分。我们错过了一个简单的技巧吗?
我要提前感谢大家的时间和回复
更新和解决方案
我能够使用 GPUImage 实现这一点。
涉及的步骤
- 将正常图像分配给
UIButton 的 UIControlStateNormal 并将灰度转换图像从 GPUImageGrayScaleFilter 分配到 UIControlStateHighlighted
- 当您希望图像获得颜色时触发状态更改
- 当您希望图像变灰时触发状态更改
这个轮播的表现非常流畅。开始时 GPU Time Elapsed 配置文件出现峰值,但之后绝对为零。
随着测试的进行,我会更新分析统计数据。
谢谢大家。
Best Answer-推荐答案 strong>
如果您的图像数量有限,您可以下载普通图像,创建灰度副本并将两者保存到磁盘。
在 ScrollView 中,使用具有自定义类型和清晰背景颜色的 UIButton 而不是 UIImageView。
UIButton 允许您为不同的控件状态设置不同的图像 。
设置正常和选择/禁用状态的正常和灰度图像。对于不需要图像的 View ,只需不要设置图像。
当滚动开始和结束时,在委托(delegate)中更改按钮的状态。
附: :您是否考虑过 ScrollView 的更复杂的后代“UITableView”和“UICollectionView”,而不是使用简单的 ScrollView ?它们将为您节省大量与滚动相关的代码和时间。
关于iOS ScrollView 在非事件和滚动正常图像上具有灰度图像,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27773232/
|