2

我正在尝试使用以下代码将MPMediaItemArtworkImage 输入到单元格的 ImageView 中。UITableView's

MPMediaItemArtwork *artwork = [[[self.arrayOfAlbums objectAtIndex:indexPath.row] representativeItem]valueForProperty:MPMediaItemPropertyArtwork];
    UIImage *artworkImage = [artwork imageWithSize: cell.imageView.bounds.size];

if (artworkImage)
    {
        cell.imageView.image = artworkImage;

    }

    else
    {
        cell.imageView.image = [UIImage imageNamed: @"noArtwork.png"];
    }

UITableView's当我在单元格中插入艺术品图像时没关系ImageView

但是当我的艺术品图像太小或太大时,就像下图一样。没有完全填满cell的ImageView。

在此处输入图像描述

你看到了吗?Stretch我想像iOS 音乐应用一样设置填充

这是设置完全填充的内置应用程序艺术品图像Stretch

在此处输入图像描述

我想那样做。

所以我用cell.imageView.contentMode = UIViewContentModeScaleAspectFill;了但是没有效果。

那么我该怎么做呢?谢谢你的工作。

4

2 回答 2

4

试试这个来计算一个新的和合适的图像;调整newRect到单元格的矩形。

// scale and center the image

CGSize sourceImageSize = [artworkImage size];

// The rectangle of the new image
CGRect newRect;
newRect = CGRectMake(0, 0, 40, 33);

// Figure out a scaling ratio to make sure we maintain the same aspect ratio
float ratio = MAX(newRect.size.width / sourceImageSize.width, newRect.size.height / sourceImageSize.height);

UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 1.0);

// Center the image in the thumbnail rectangle
CGRect projectRect;
projectRect.size.width = ratio * sourceImageSize.width;
projectRect.size.height = ratio * sourceImageSize.height;
projectRect.origin.x = (newRect.size.width - projectRect.size.width) / 2.0;
projectRect.origin.y = (newRect.size.height - projectRect.size.height) / 2.0;

[sourceImage drawInRect:projectRect];
UIImage *sizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

cell.imageView.image = sizedImage;
于 2013-02-01T14:16:16.213 回答
1

线

UIImage *artworkImage = [artwork imageWithSize: cell.imageView.bounds.size];

创建具有单元格大小的图像。所以,它在这条线上被缩放,图像不会比单元格大,因此它不会在之后缩放。

我会将图像保留为原始大小或单元格大小的 2 倍,然后将比例放大到contentMode.

CGSize newSize = CGSizeMake(artwork.bounds.size.width, artwork.bounds.size.height)
UIImage *artworkImage = [artwork imageWithSize: newSize];
于 2013-02-01T13:19:33.440 回答