菜鸟教程小白 发表于 2022-12-12 13:33:21

iOS ScrollView 在非事件和滚动正常图像上具有灰度图像


                                            <p><p><strong>声明</strong></p>

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

<p><strong> ScrollView 中的内容</strong></p>

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

<p><strong>图像分辨率</strong></p>

<p>图像分辨率会很小,例如 <strong>300x150</strong>、<strong>450x150</strong></p>

<p><strong>我们做了什么?</strong></p>

<p>我们遇到了<a href="https://github.com/BradLarson/GPUImage" rel="noreferrer noopener nofollow">GPUImage</a>框架由 <a href="https://stackoverflow.com/users/19679/brad-larson" rel="noreferrer noopener nofollow">Brad Larson</a> .该框架至少可以说令人印象深刻,我们一直对框架提供的一切着迷。</p>

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

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

<p><strong>优化</strong></p>

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

<p><strong>我们现在卡在哪里了?</strong></p>

<p>有两种方法可以让图像恢复颜色</p>

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

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

<p>我要提前感谢大家的时间和回复:)</p>

<h2>更新和解决方案</h2>

<p>我能够使用 GPUImage 实现这一点。</p>

<p>涉及的步骤</p>

<ol>
<li>将正常图像分配给 <code>UIButton</code> 的 <code>UIControlStateNormal</code> 并将灰度转换图像从 <code>GPUImageGrayScaleFilter</code> 分配到 <code>UIControlStateHighlighted</code></li>
<li>当您希望图像获得颜色时触发状态更改</li>
<li>当您希望图像变灰时触发状态更改</li>
</ol>

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

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

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

<p>附: :您是否考虑过 ScrollView 的更复杂的后代“UITableView”和“UICollectionView”,而不是使用简单的 ScrollView ?它们将为您节省大量与滚动相关的代码和时间。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS ScrollView 在非事件和滚动正常图像上具有灰度图像,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27773232/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27773232/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS ScrollView 在非事件和滚动正常图像上具有灰度图像