Как установить заполнение изображения MediaItemArtwork в UITableViewCell в iOS?

Я пытаюсь войти MPMediaItemArtwork Изображение в UITableView's ImageView ячейки со следующим кодом.

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.

Ты видишь это? Я хочу установить Fill с Stretch как приложение iOS Music

Вот изображение встроенного приложения, которое полностью заполнено Stretch

Я хочу сделать так.

Так что я использовал cell.imageView.contentMode = UIViewContentModeScaleAspectFill; Однако это не эффект.

Так как я могу это сделать? Спасибо за Вашу работу.

2 ответа

Решение

Попробуйте это для расчета нового и подходящего изображения; регулировать 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;

Линия

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];
Другие вопросы по тегам