2014-10-09 3 views
3

В моем приложении я показываю обложку альбома на кнопке. На iPhone 5 размер ограничителя кнопки составляет 273x269.5. Мой код для оформления работ всегда был очень прост, и ничего не изменилось.imageWithSize Flakey с MPMediaItemArtwork в iOS8

MPMediaItem *currentItem = [musicPlayer nowPlayingItem]; 
MPMediaItemArtwork *iTunesArtwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork]; 

CGSize buttonBounds = self.albumArtworkButton.bounds.size; 
UIImage *resizedImage = [iTunesArtwork imageWithSize: CGSizeMake (buttonBounds.width, buttonBounds.height)]; 

Внезапно с iOS8 выполнение этого результата в resizedImage = nil. Что действительно странно, что, если я изменю последнюю строку, исполнение следующей строки:

UIImage *resizedImage = [iTunesArtwork imageWithSize: CGSizeMake (300, 300)]; 

результаты действительного изображения (т.е. resizedImage не ноль, а изображение может отображаться).

Любые идеи, что может вызвать это? Я ничего не изменил, но код сломался.

ответ

4

Я вижу эту новую ошибку в iOS8 с моими приложениями. Это происходило только для некоторых из обложки, и это зависело от того, какой был размер моей цели. кажется, что ошибка имеет какое-то отношение к ней, она не может уменьшить изображение каким-то фактором. Например, у меня есть некоторые изображения из iTunes размером 600x600, и когда я пытаюсь получить imageWithSize размером 100x100, он возвращает nil, пытаясь получить изображение с размером изображения размером 200x200. У меня есть одно изображение размером 200x203, а 100x100 не работает, 101x101 не работает, но 102x102 будет работать - я подумал, что, возможно, самое высокое разрешение, которое вы хотели, должно быть больше 1/2 от первоначального измерения, чтобы избежать ошибки, но это оказалось неправдой на основе 600x600 изображений, работающих на 200x200. возможно, это изменение общей памяти или что-то в этом роде - в любом случае трудно понять, почему ошибка возникает, когда у вас нет своего источника, поэтому я перестал угадывать и использовал это обходное решение. в основном просто используйте исходные границы объекта MPMediaItemArtwork, когда вы запрашиваете UIImage через imageWithSize. Затем убедитесь, что UIImageView, который вы используете с UIImage, имеет значение contentMode, чтобы правильно отображать изображение (UIViewContentModeScaleAspectFill, UIViewContentModeScaleAspectFit, UIViewContentModeScaleToFill).

// display album artwork 
MPMediaItemArtwork* artwork = [representativeItem valueForProperty:MPMediaItemPropertyArtwork]; 
CGRect bounds = [artwork bounds]; 
UIImage* artworkImage = [artwork imageWithSize:bounds.size]; 
if (artworkImage) 
{ 
    [cell.imageView setImage:artworkImage]; 
} 
else 
{ 
    [cell.imageView setImage:[UIImage imageNamed:@"AlbumDefault.png"]]; 
} 
+0

Настройка contentMode на imageView не решает проблему для меня. У вас есть другие трюки в рукаве? К сожалению, ручное изменение размера изображения с оригинальным размером, к сожалению, очень медленное. – wstr