iOS照片框架数据UTI或图像在云中时的格式

iOS照片框架数据UTI或图像在云中时的格式,ios,objective-c,photosframework,Ios,Objective C,Photosframework,我正在升级我的GIF应用程序以使用iOS 8照片框架,基本上我想在他们的照片库中找到所有用户的GIF并显示它们。在iCloud照片库的“优化存储”发挥作用之前,与ALAssetLibrary的合作非常出色,因为现在用户可以在云中拥有大量图像,因此,需要使用照片框架来获取它们。不幸的是,在从云端下载之前,您似乎无法判断PHAsset是GIF还是普通静态图像。。。。这将使我的应用程序相当跛脚当你有零或不良的网络连接 这是我用来尝试仅获取GIF的代码: PHFetchOptions* fetchOpt

我正在升级我的GIF应用程序以使用iOS 8照片框架,基本上我想在他们的照片库中找到所有用户的GIF并显示它们。在iCloud照片库的“优化存储”发挥作用之前,与ALAssetLibrary的合作非常出色,因为现在用户可以在云中拥有大量图像,因此,需要使用照片框架来获取它们。不幸的是,在从云端下载之前,您似乎无法判断
PHAsset
是GIF还是普通静态图像。。。。这将使我的应用程序相当跛脚当你有零或不良的网络连接

这是我用来尝试仅获取GIF的代码:

PHFetchOptions* fetchOptions = [[PHFetchOptions alloc] init];
            fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
            PHFetchResult *allPhotosResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options: fetchOptions];

            //   Get assets from the PHFetchResult object
            [allPhotosResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {
                //NSLog(@"asset %@", asset);
                PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init];
                options.synchronous = YES;
                options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
[imageManager requestImageDataForAsset: asset options: options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {

// when the item is in the cloud dataUTI is nil so I can't check what format it is...

}
信息字典包含一些未记录的密钥:

  • PhImageResultDeliverImageFormatKey
  • PHImageResultWantedImageFormat
我看到它的值是9999,9998和40xx。但它们似乎与图像是否为GIF并不特别相关,因此必须完全与其他内容相关

任何想法???

使用此选项

PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    options.networkAccessAllowed = YES;

看起来,如果不从云中取出图像并在之后进行检查,就没有办法解决这个问题。我正在更新我的应用程序以实现这一点,但要根据
PHAsset
localIdentifier
记住每个图像的类型,这样它只需要执行一次


如果您采用这种方法,您可能还希望避免表示突发、HDR或全景图像的
PHAsset
s,因为它们不会是GIF(显然也不包括视频!)

有一个解决方案,但仅针对IOS 9,它们添加了一个新的结构

typedef NS_OPTIONS(NSUInteger, PHAssetSourceType) {
 PHAssetSourceTypeNone            = 0,
 PHAssetSourceTypeUserLibrary     = (1UL << 0),
 PHAssetSourceTypeCloudShared     = (1UL << 1),
 PHAssetSourceTypeiTunesSynced    = (1UL << 2),
} NS_AVAILABLE_IOS(9_0);

这就要求在了解图像之前从云端下载图像,这是我试图避免的问题。。。在尝试任何网络活动之前,我想知道相集的格式,但它似乎没有公开。。。仅限资产是图像还是视频:(这没有帮助,因为它只是告诉您资产来自何处,您可以很容易地找到它。问题是找到云中图像的文件扩展名,找到GIF而不必检查它们所有我误解了这个问题也许您可以在这里回答我的问题
Added PHAssetResourceType [enum]
Added PHAssetResourceType.AdjustmentBasePhoto
Added PHAssetResourceType.AdjustmentData
Added PHAssetResourceType.AlternatePhoto
Added PHAssetResourceType.Audio
Added PHAssetResourceType.FullSizePhoto
Added PHAssetResourceType.FullSizeVideo
Added PHAssetResourceType.Photo
Added PHAssetResourceType.Video