2

次のコードを使用して、セルの ImageViewにMPMediaItemArtwork画像を入力しようとしています。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です。

しかし、アートワークの画像が小さすぎたり大きすぎたりすると、次の写真のようになります。セルの ImageView を完全に埋めるわけではありません。

ここに画像の説明を入力

わかりますか?StretchFill with iOS Music Appを設定したい

完全塗りつぶしを設定したビルドインアプリのアートワーク画像はこちら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 に答える