Jac*_*ill 2 iphone objective-c taglib albumart ios
我有以下问题要问:
如何使用iOS应用程序编译taglib?
我有点困惑,因为我将文件夹添加到我的项目中,尝试编译它,但它失败了1640错误.
如何使其成功编译 - 我问的原因是taglib允许从标签中提取专辑图片.
如果有人知道基于Objective-C的专辑图片提取类它会有所帮助 - 我不知道Apple为什么不在Core Foundation中添加这样做的方法 - 因为有一些方法可以从ID3标签中提取一些数据.
我不明白为什么没有一些 Objective-C的方法.
任何帮助赞赏.
编辑:
经过几个小时的尝试,我发现这里的Java函数似乎可以正常工作,但我还没有得到如何将其转换为Objective-C 的线索(或者更不用说C++)但是,它的类型似乎与Objective-C/C++中的类型完全不同.
如果有人知道转换它的方法它会真的有帮助,因为这似乎是我最后的选择,因为我已经尝试了很多其他的.
hat*_*nch 11
- (void)loadArtworksForFileAtPath:(NSString *)path completion:(void (^)(NSArray *))completion
{
NSURL *u = [NSURL fileURLWithPath:path];
AVURLAsset *a = [AVURLAsset URLAssetWithURL:u options:nil];
NSArray *k = [NSArray arrayWithObjects:@"commonMetadata", nil];
[a loadValuesAsynchronouslyForKeys:k completionHandler: ^{
NSArray *artworks = [AVMetadataItem metadataItemsFromArray:a.commonMetadata
withKey:AVMetadataCommonKeyArtwork keySpace:AVMetadataKeySpaceCommon];
NSMutableArray *artworkImages = [NSMutableArray array];
for (AVMetadataItem *i in artworks)
{
NSString *keySpace = i.keySpace;
UIImage *im = nil;
if ([keySpace isEqualToString:AVMetadataKeySpaceID3])
{
NSDictionary *d = [i.value copyWithZone:nil];
im = [UIImage imageWithData:[d objectForKey:@"data"]];
}
else if ([keySpace isEqualToString:AVMetadataKeySpaceiTunes])
im = [UIImage imageWithData:[i.value copyWithZone:nil]];
if (im)
[artworkImages addObject:im];
}
completion(artworkImages);
}];
}
Run Code Online (Sandbox Code Playgroud)
这只是上面@hatfinch的答案,但已修复并正在运行.
- (void)artworksForFileAtPath:(NSString *)path block:(void(^)(NSArray *artworkImages))block
{
NSURL *url = [NSURL fileURLWithPath:path];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
NSArray *keys = [NSArray arrayWithObjects:@"commonMetadata", nil];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
NSArray *artworks = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata
withKey:AVMetadataCommonKeyArtwork
keySpace:AVMetadataKeySpaceCommon];
NSMutableArray *artworkImages = [NSMutableArray array];
for (AVMetadataItem *item in artworks) {
NSString *keySpace = item.keySpace;
if ([keySpace isEqualToString:AVMetadataKeySpaceID3]) {
NSDictionary *d = [item.value copyWithZone:nil];
[artworkImages addObject:[UIImage imageWithData:[d objectForKey:@"data"]]];
} else if ([keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
[artworkImages addObject:[UIImage imageWithData:[item.value copyWithZone:nil]]];
}
}
if(block) {
block(artworkImages);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5600 次 |
| 最近记录: |