Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 重新缩放图像,使宽度为屏幕大小的一半_Ios_Swift_Uiimageview_Uiimage_Image Scaling - Fatal编程技术网

Ios 重新缩放图像,使宽度为屏幕大小的一半

Ios 重新缩放图像,使宽度为屏幕大小的一半,ios,swift,uiimageview,uiimage,image-scaling,Ios,Swift,Uiimageview,Uiimage,Image Scaling,我是swift的新手,目前正在尝试在自定义UITableCell中显示多个图像视图 理想情况下,我希望对每个图像进行缩放,使其宽度填充屏幕大小的一半(同时保留原始纵横比) 这个想法是,每个UITableCell将有一个由3个图像和UILabel中的一些附加信息组成的拼贴画——最高的图像将位于它自己的列中,较小的两个图像正好堆叠在最高的图像旁边。下面是一个屏幕截图,有助于说明我试图实现的目标: 然而,我在这方面遇到了一些麻烦。当前,一旦使用Alamofire.GET请求检索到图像,我将调用一个函

我是swift的新手,目前正在尝试在自定义UITableCell中显示多个图像视图

理想情况下,我希望对每个图像进行缩放,使其宽度填充屏幕大小的一半(同时保留原始纵横比)

这个想法是,每个UITableCell将有一个由3个图像和UILabel中的一些附加信息组成的拼贴画——最高的图像将位于它自己的列中,较小的两个图像正好堆叠在最高的图像旁边。下面是一个屏幕截图,有助于说明我试图实现的目标:

然而,我在这方面遇到了一些麻烦。当前,一旦使用Alamofire.GET请求检索到图像,我将调用一个函数,该函数执行以下操作:

let aspectRatio = image.size.width / image.size.height
let newHeight = desiredWidth / aspectRatio

UIGraphicsBeginImageContext(CGSizeMake(desiredWidth, newHeight))
image.drawInRect(CGRectMake(0, 0, desiredWidth, newHeight))

let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return scaledImage
返回图像后,在将其添加到第一个图像视图之前,我将更新图像视图的框架,如下所示:

      cell.img_1.frame =  CGRect(x: 0, y: 0, width: new_image.size.width, height: new_image.size.height)

      cell.img_1.image = new_image
但是,当我运行代码时,图像的宽度并不是屏幕的一半——相反——它们看起来与我在不缩放的情况下将它们放入图像视图时所看到的完全相同(ImageView设置为Aspect Fit模式)

当我打印出新缩放图像的宽度和高度时,这些值与我想要的一致

我确实注意到,缩放前和缩放后的纵横比略微偏离了0.01因此,鉴于图像视图设置为Aspect Fit,这能解释我所看到的吗

我也尝试过将模式设置为Aspect Fill,但看到一些图像的宽度没有适当缩小,占据了屏幕的一半以上

对于这个冗长的问题,我深表歉意,非常感谢您的帮助,如果需要的话,我会提供更多的信息。谢谢大家!

ImageView设置为纵横比匹配模式)


但这是你的问题——或者其中之一。如果不希望图像视图调整图像大小,请不要使用任何“方面”内容模式,也不要使用任何“适合”或“填充”内容模式。例如,使用“中心”。

现在尝试此功能可能无法准确给出您的目标,但至少您在调整图像大小方面所做的努力不会被忽略!顺便说一下,不要调用
UIGraphicsBeginImageContext
。始终在最后一个参数
0
中使用
UIGraphicsBeginImageContextWithOptions
。否则,您的图像在高分辨率屏幕上看起来会很差(这是目前大多数屏幕上的情况)。谢谢,这很有效!!我会的。作为后续问题--我希望我的单元格的高度能够环绕内容。我已经提供了一个估计的行高以及指定的“tableView.rowHeight=UITableViewAutomaticDimension”,但目前我的图像正在运行到下一个单元格中…您实际上没有得到后续问题-至少在评论中没有。这被称为“吸血”,被认为是不好的形式。我已经回答了你的问题!如果我帮助你,请考虑接受我的回答。如果你还有其他问题——我相信你有——问一个全新的问题。我(和其他很多人)会很乐意帮忙的。现在还不清楚你是否想让这些图像保持原来的形状。您希望它们以一种或另一种方式“拉伸”以适合最终形状吗?或者,如果它们与最后一个盒子的形状不同,你想让它们在顶部或侧面留一个间隙吗?@Joe——我想保留原始的纵横比,因此形状应该保持不变。我不认为我会用比视图本身小的图像填充视图——至少现在不会。值得注意的是,正如Matt在下面善意地解释的那样。。。肖恩,很有可能,事实上,只要在选项上使用正确的设置,你就可以实现你的目标。我的意思是,完全不做任何代码,只允许iOS图像显示为您调整大小。在几分钟内,您可能正在进行一次大型的“facepalm”尝试:)请注意,在某种程度上,对于您正在尝试的AcvHive来说,更困难的解决方案是使用动态大小的表视图。我总是觉得这确实很难。我认为你不需要这样的困难。我认为你实际上只是没有为图像选择正确的大小选项,你应该删除所有试图调整图像大小(拉伸..无论什么)的代码。今晚我将对此进行讨论。。我得说我觉得我在做一些过度的工程。然而,我在这里的主要目标是在图像之间没有任何空白——更多的是为了美观。如果我允许iOS自动调整大小,难道我不能有不一致的地方吗,比如,一些单元格有空白,而一些单元格没有空白?