iphone - MPMediaItemArtwork 返回错误大小的图稿

标签 iphone objective-c ios mpmediaitem

我发现 MPMediaItemArtwork 存在一个一致的问题,即它返回的图稿尺寸与我要求的尺寸不同。

我使用的代码如下

MPMediaItem *representativeItem = [self.representativeItems objectAtIndex:index];
MPMediaItemArtwork *artwork = [representativeItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *albumCover = [artwork imageWithSize:CGSizeMake(128.0f, 128.0f)];

这按预期工作,除了返回图像的大小始终是 {320.0f, 320.0f},即使我特别要求 {128.0f, 128.0f} code> 并且由于图像的大小是预期大小的两倍以上,它导致了一些内存问题。

有没有其他人目睹过这个特殊问题。你是怎么解决的?

Apple 文档建议这应该像我期望的那样工作,而不是实际情况

最佳答案

我下载了 AddMusic sample source来自 Apple,它也使用 MPMediaItemArtwork 只是为了看看他们是如何处理事情的。

在该项目的 MainViewController.m 文件中,这些行:

// Get the artwork from the current media item, if it has artwork.
MPMediaItemArtwork *artwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork];

// Obtain a UIImage object from the MPMediaItemArtwork object
if (artwork) {
    artworkImage = [artwork imageWithSize: CGSizeMake (30, 30)];
}

始终返回比例为 1.0 的尺寸为 55 x 55 的图像。

我想说 MPMediaItemArtwork 不遵守请求的尺寸参数是一个错误,您应该通过 bugreporter.apple.com 提交,尽管 Apple 可能也有借口说“55 x 55”是在 iPad 上显示的最佳尺寸 & iPhone。

对于直接调整 UIImage 大小,我建议使用 Trevor Harman 的“UIImage+Resize”方法,可在此处找到:http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way

一旦你将他的类别扩展添加到你的项目中,你就可以通过这样一个简单的调用来实现你想要的内存节省调整大小:

UIImage *albumCover = [artwork imageWithSize:CGSizeMake(128.0f, 128.0f)];
UIImage *resizedCover = [albumCover resizedImage: CGSizeMake(128.0f, 128.0f) interpolationQuality: kCGInterpolationLow]; 

关于iphone - MPMediaItemArtwork 返回错误大小的图稿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667631/

相关文章:

ios - 未释放的 KVO 发生奇怪的崩溃

android - Social.localUser.Image 在 Unity3d 中返回 null

ios - 如何使用 Restkit 和 Core Data 存储对象和种子预加载数据

iphone - 链接到我在 App Store 上的应用程序

ios - 启动我的应用程序时出现错误消息

iphone - 如何判断一个整数是否是 10 的倍数(Xcode)?

objective-c - 故意创建EXC_BAD_ACCESS

ios - 如何在按下主页按钮时在 IOS 中显示顶部栏。?

iphone - 在我的主视图中将 UIImageView 置于其他 UIImageView 之上

ios - 我如何制作链接到 uiscrollview contentoffest 的 uiimageView 缩放动画?