美文网首页音视频
photos 判断图片是否在icloud的几个坑

photos 判断图片是否在icloud的几个坑

作者: 怕腥的鱼 | 来源:发表于2019-05-06 17:44 被阅读0次

    网络上找了很久,基本都是这个方法

    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
    options.synchronous = YES;
    [[PHImageManager defaultManager] requestImageForAsset:self.phAsset targetSize:CGSizeMake(50, 50) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
    if ([[info objectForKey:PHImageResultIsInCloudKey] boolValue]) {
    }
    }];
    

    但是我试了很多次,调整了很多options参数,就是不返回 PHImageResultIsInCloudKey 这个key,搜寻良久 发现只有尝试去请求高保真图 PHImageManagerMaximumSize的时候,它才会返PHImageResultIsInCloudKey这个key,但是我这个方法本来只想展示50x50的小图,也就是说我需要另外一个专门判断是否在icloud的方法

    于是尝试特意加了一个方法判断,能找到就是在本地,不然就是在icloud上

    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    options.networkAccessAllowed = NO;
    options.synchronous = YES;
    [[PHImageManager defaultManager] requestImageForAsset:self.phAsset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
       //如果能获取到 result 就是本地的图,不然就在icloud
    }];
    

    但是这个方法极其损耗性能,对于相册里的几百上千照片,统一一次加载会卡顿,一个个去取,异步请求也会导致 一卡一卡,体验很差。
    后来在stackoverflow.com 上找到一个方法,非常喜悦,这个方法解决了性能问题

    NSArray *resourceArray = [PHAssetResource assetResourcesForAsset:rescource.phAsset];
    bIsLocallayAvailable = [[resourceArray.firstObject valueForKey:@"locallyAvailable"] boolValue];
    

    but! 在iOS10以下无效 呵呵

    后来发现了另外一个请求图片的方法requestImageDataForAsset

    [[PHImageManager defaultManager] requestImageDataForAsset:rescource.phAsset options:options resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
    if ([[info objectForKey:PHImageResultIsInCloudKey] boolValue]) {
       
    }
    }];
    

    这个方法在iOS8以上的系统都支持,并且性能还可以,不会造成卡顿,OK,解决!

    相关文章

      网友评论

        本文标题:photos 判断图片是否在icloud的几个坑

        本文链接:https://www.haomeiwen.com/subject/ixpdoqtx.html