gpt4 book ai didi

ios - 在 Collection View 中不失真地显示图像的正确方法是什么

转载 作者:行者123 更新时间:2023-11-28 16:15:27 25 4
gpt4 key购买 nike

我有一个非常基本的问题,因此不发布任何代码。

概览

我有一个 Collection View ,它使用了我编写的自定义布局。所有这个自定义布局所做的是它应用一些数学并根据屏幕宽度找出放置在屏幕上的最佳单元格数量,并尝试使用填充来四舍五入额外的像素。因此,当 Collection View 改变其方向时,我的大部分单元格大小都会发生变化,尤其是在 iPad Pro 等设备上。我的意思是,如果像元大小在纵向时为 300 x 300,则在横向时可能会变成 320 x 300。 (它们不是准确的值,只是想给出一个想法)

每个单元格中都有 imageView,需要从服务器下载图像。我正在使用 SDWebImage。下载的图像比我的单元格大得多,我不想将如此大的图像加载到内存中,因此我决定在将图像下载到 SDWebImageCache 之前调整图像的大小。

问题

现在,由于我的单元格大小会根据设备方向发生变化,为了使图像看起来像素完美,每次设备为每个单元格旋转时,我都必须调整图像大小。但这会导致性能不佳。

我想到的解决方案

  1. 我必须在 SDWeImageCache 中针对一个方向缓存两张图像,但这又会增加应用程序的内存占用。

  2. 在各种方向中找到最大尺寸的单元格并将图像调整为该尺寸,然后将相同的图像用于所有较小的单元格尺寸,并将 ImageView 的模式设置为 AspectToFit。

请建议我什么是正确的方法。我不需要代码,只需要想法。

最佳答案

让我知道这是否是个坏主意,但有可能的选择。

你可以

1) 获取原始图像大小。保存这个。

函数重置图像(){

2)判断图片是否宽>高

3) 如果宽度 > 高度,那么您知道这将是一张更长的图片。确定你想要多长时间。假设您想要大约 1/10* 单元格宽度的更宽图片

4) 相应地确定图像的高度。 ((1/10)/widthOfCell)*imageHeight

5) If (width > height) imageView.frame = CGRect(0, 0, 1/10*widthCell, height)

6) imageView.contentMode = .ScaleAspectFit, imageView.image = UIImage(named: "awesome")

7) 可能保存 imageView.size 以防再次旋转。

这允许您仅更改 imageView 而不是保存图像数据,希望能移除空白区域。发表评论,让我看看你的想法。

关于ios - 在 Collection View 中不失真地显示图像的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39132268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com