如何获得共享照片流ALAsset的ALAssetRepresentation?

时间:2013-08-06 12:09:22

标签: ios objective-c alasset photostream

当我尝试从照片流中访问图片时,有时[asset defaultRepresentation]方法会返回nil。

根据文档,如果资产尚未在本地可用,则可能会发生这种情况。

  

此方法为共享照片流中尚未提供的资源返回nil   本地。如果资产将来可用,则为ALAssetsLibraryChangedNotification   通知已发布。

一旦我在Photos.app中查看照片,它也可用于我的应用程序,但显然我想让我的应用程序触发"本地下载"事件。

我查看了Apple的MyImagePicker示例代码,但它表现出相同的行为(只有缩略图可用)

如何在本地提供资源?

编辑:由于Apple在iOS8中引入了Photos.framework,并且在iOS9中使用ALAssets已被弃用,因此可能永远不会修复。

3 个答案:

答案 0 :(得分:4)

我陷入同样的​​问题。我找不到实际获取图像的方法。 您只能通过调用[ALAssetsLibrary disableSharedPhotoStreamsSupport];

来显示“defaultRepresentation”为零的图片,或者根本不显示对共享照片的支持

希望有所帮助

答案 1 :(得分:2)

我找到了答案!没有记录,因此请谨慎使用以下答案。 (谨慎我的意思是,Apple不允许使用私有API调用)。

在资产上有一个名为- (void)requestDefaultRepresentation;的方法,您可以使用此方法触发资源库下载共享照片。如文档中所述,将ALAssetsLibraryChangedNotification触发,以通知您图像可用。

不知道,为什么Apple没有记录它。祝你好运玩得开心=)

您可以使用以下标题避免警告:

<强> ALAsset + RequestDefaultRepresentation.h

#import <AssetsLibrary/AssetsLibrary.h>

@interface ALAsset (RequestDefaultRepresentation)
- (void)requestDefaultRepresentation;
@end

答案 2 :(得分:1)

由于Apple在iOS8中引入了PhotoKit框架,并且所有ALAsset内容在iOS9中都被弃用,因此可以肯定地说这将永远不会得到修复。

然而,这可以通过新的PhotoKit API正确完成。

在要求提供图片时,您必须在networkAccessAllowed = YES上设置PHImageRequestOptions,如果需要,它会从iCloud下载。

 PHAsset* photoAsset = ...
 CGSize fullImageSize = ...
 PHImageRequestOptions* options = [PHImageRequestOptions new];
 options.networkAccessAllowed = YES;
 [[PHImageManager defaultManager] requestImageForAsset:photoAsset
      targetSize:fullImageSize  contentMode:PHImageContentModeAspectFill
      options:options  resultHandler:^(UIImage *result, NSDictionary *info) {  /* use result image */  }];
相关问题