1

我正在升级我的 GIF 应用程序以使用 iOS 8 照片框架,基本上我想在他们的照片库中找到所有用户的 GIF 并显示它们。在 iCloud 照片库的“优化存储”发挥作用之前工作得很好,ALAssetLibrary因为现在用户可以在云中拥有大量图像,因此需要使用照片框架来获取它们不幸的是,您似乎无法判断是否aPHAsset是 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...

}

info 字典包含一些未记录的键:

  • PHImageResultDeliveredImageFormatKey
  • PHImageResultWantedImageFormat

我见过的值为 9999、9998 和 40xx。但它们似乎与图像是否是 GIF 并没有特别相关,因此必须完全与其他东西相关......

有任何想法吗??

4

3 回答 3

0

使用此选项!

PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    options.networkAccessAllowed = YES;
于 2015-05-22T09:04:40.300 回答
0

看起来如果不从云端下载图像并进行检查,就没有办法解决这个问题。我正在更新我的应用程序来做到这一点,但要记住每个图像的类型,PHAsset以便localIdentifier它只需要执行一次。

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

于 2015-06-03T18:50:53.263 回答
0

有一个解决方案,但仅适用于 IOS 9,他们添加了一个新结构

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

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
于 2015-06-18T11:45:58.667 回答