1

类似的事情并不能真正回答我的问题

我在做什么

用户点击“保存”按钮。这将创建一个新的表格视图单元格。图像在另一个线程中下载。

  • 我从 URL 下载图像
  • 保存图像
  • 在保持纵横比的同时缩放图像
  • 将图片设置为之前创建的 UITableViewCell imageView

问题

问题是最后一步。我希望图像填充视图并被剪裁。但是,始终绘制图像以使其完全适合 imageView 内部并带有一些空白区域。图像甚至不会在单个维度中填充单元格的 imageView。它与顶部、底部和左侧的空白右对齐。

当我在设置错误绘制的图像后点击单元格时,单元格会重绘并绘制图像以在一维中填充 imageView,但仍然没有被剪裁。

代码

我创建了单元格并设置了一个临时图像

cell.imageView.image = [UIImage imageNamed:@"125-food.png"];
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
cell.imageView.layer.masksToBounds=YES;

我这样开始工作:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 500000 * NSEC_PER_USEC), dispatch_get_current_queue(), ^{ /*Stuff*/ });

缩放图像代码

CGFloat newHeight;
CGFloat newWidth;
if(image.size.width>image.size.height)
{
    newHeight = 44.0;
    newWidth = image.size.width * newHeight / image.size.height;
}
else
{
    newWidth = 44.0;
    newHeight = image.size.height * newWidth / image.size.width;
}

CGRect newRect = CGRectMake(0,0,newWidth,newHeight);
UIGraphicsBeginImageContext(newRect.size);
[image drawInRect:newRect];
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;

然后我在单元格中设置 newImage

cell.imageView.image = newImage;

屏幕截图

细胞截图

新单元格不会填充 44x44 图像视图,并且旧单元格不会被剪裁。

4

1 回答 1

0

我似乎已经解决了我的问题。首先,我缩放图像的方式不正确。我在这里找到了一个更好的方法UIImage: Resize, then Crop

我使用了Anybody提出的方法。因此,通过计算比例因子,我可以创建具有正确缩放比例的正确大小的图像。这使我不必在视图中剪辑图像。

CGFloat scaleFactor = 1.0;

//Deciding which factor to use to scale the image (factor = targetSize / imageSize)
if (image.size.width > targetSize.width || image.size.height > targetSize.height)
    if (!((scaleFactor = (targetSize.width / image.size.width)) > (targetSize.height / image.size.height))) //scale to fit width, or
        scaleFactor = targetSize.height / image.size.height; // scale to fit heigth.

UIGraphicsBeginImageContext(targetSize); 

//Creating the rect where the scaled image is drawn in
CGRect rect = CGRectMake((targetSize.width - image.size.width * scaleFactor) / 2,
                         (targetSize.height -  image.size.height * scaleFactor) / 2,
                         image.size.width * scaleFactor, image.size.height * scaleFactor);

//Draw the image into the rect
[image drawInRect:rect];

现在我只需要设置图像。从 URL 加载 UIImage 时在 UITableViewCell 中设置 UIImageView 大小?建议我应该能够设置图像。但这给了我一个像我的屏幕截图一样的结果。显然,我也无法控制表格单元格视图。

UITableViewCell 中的 Resize UIImageView 中,建议在 imageView 上设置变换。我想既然缩略图已经调整大小,我应该只缩放到 1.0。

cell.imageView.transform = CGAffineTransformMakeScale(1.0, 1.0);

到目前为止,这似乎运作良好!

我的临时图标似乎可以正常工作,并且保存的缩略图可以正确显示。不同之处在于临时图像的大小不同。所以我把我的图标放大到正确的大小。我的图像现在可以正确显示了!

于 2013-04-30T03:11:27.987 回答