關(guān)于iOS選取相冊(cè)中iCloud云上圖片和視頻

工作原因主儡,需要處理接入一個(gè)視頻模塊暑诸,在視頻選擇的時(shí)候遇到了一個(gè)不太容易發(fā)現(xiàn)的bug,產(chǎn)生的原因是由于手機(jī)內(nèi)存小峰搪,而用戶又打開了相冊(cè)同步iCloud岔冀,

加載中的圖片

在這時(shí),如果本地可用內(nèi)存過小概耻,會(huì)導(dǎo)致
將本地相冊(cè)中的圖片或視頻刪除只留縮略圖使套,如果App調(diào)用的時(shí)候想要選取這種圖片就需要從iCloud云中進(jìn)行下載,
才能獲取原圖或原視頻鞠柄。

下面po下解決方案:

如果你之前處理過相冊(cè)問題侦高,那么對(duì)如下的代碼肯定不陌生,就是很普通的兩個(gè)系統(tǒng)級(jí)別的請(qǐng)求回調(diào)厌杜,獲取對(duì)應(yīng)的圖片奉呛,視頻。

// get Image
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {

}];
// get Video
[[PHImageManager defaultManager] requestPlayerItemForVideo:asset options:nil resultHandler:^(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info) {
    if (completion) completion(playerItem,info);
}];

但是往往之前沒有注意到第二個(gè)輸入 options 是用來干嘛的夯尽,
其實(shí)解決方案就來自于這個(gè) PHImageRequestOptions瞧壮,PHVideoRequestOptions

這這兩個(gè) options 都有一個(gè)共同的參數(shù)就是

@property (nonatomic, assign, getter=isNetworkAccessAllowed) BOOL networkAccessAllowed;
// if necessary will download the image from iCloud (client can monitor or cancel using progressHandler). Defaults to NO (see start/stopCachingImagesForAssets)

系統(tǒng)的解釋也很詳細(xì)匙握,如果賦值 YES 咆槽,那么允許從 iCloud 中獲取圖片和視頻,默認(rèn)是 NO肺孤。

雖然這個(gè)問題解決不是很難罗晕,但是往往容易被忽略济欢,所以記錄一下赠堵。

這里非常感謝@半遲塵大大的TZImagePickerController的源碼小渊,這個(gè)是一個(gè)非常靠譜的相冊(cè)選擇圖片視頻的庫(kù)茫叭,并且處于仍在維護(hù)中酬屉。感興趣的可以鏈接過去看一看源碼,寫的很好揍愁。

博主博客@HarwordLiu

下面po一下完整的這個(gè)問題的解決代碼:

/// Get Video
- (void)getVideoOutputPathWithAsset:(PHAsset *)asset completion:(void (^)(NSString *outputPath))completion {
    PHVideoRequestOptions* options = [[PHVideoRequestOptions alloc] init];
    options.version = PHVideoRequestOptionsVersionOriginal;
    options.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;
    options.networkAccessAllowed = YES;
    [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset* avasset, AVAudioMix* audioMix, NSDictionary* info){
        // NSLog(@"Info:\n%@",info);
        AVURLAsset *videoAsset = (AVURLAsset*)avasset;
        // NSLog(@"AVAsset URL: %@",myAsset.URL);
        [self startExportVideoWithVideoAsset:videoAsset completion:completion];
     }];
}
/// Get Image

- (PHImageRequestID)getPhotoWithAsset:(PHAsset *)asset photoWidth:(CGFloat)photoWidth completion:(void (^)(UIImage *, NSDictionary *, BOOL isDegraded))completion {

    PHAsset *phAsset = (PHAsset *)asset;
    CGFloat aspectRatio = phAsset.pixelWidth / (CGFloat)phAsset.pixelHeight;
    CGFloat pixelWidth = photoWidth * 2.0;
    CGFloat pixelHeight = pixelWidth / aspectRatio;
    CGSize imageSize = CGSizeMake(pixelWidth, pixelHeight);

    // 修復(fù)獲取圖片時(shí)出現(xiàn)的瞬間內(nèi)存過高問題
    PHImageRequestOptions *option = [[PHImageRequestOptions alloc] init];
    option.resizeMode = PHImageRequestOptionsResizeModeFast;
    PHImageRequestID imageRequestID = [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:imageSize contentMode:PHImageContentModeAspectFill options:option resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
        BOOL downloadFinined = (![[info objectForKey:PHImageCancelledKey] boolValue] && ![info objectForKey:PHImageErrorKey]);
        if (downloadFinined && result) {
            if (completion) completion(result,info,[[info objectForKey:PHImageResultIsDegradedKey] boolValue]);
        }
        // Download image from iCloud / 從iCloud下載圖片
        if ([info objectForKey:PHImageResultIsInCloudKey] && !result) {
            PHImageRequestOptions *option = [[PHImageRequestOptions alloc]init];
            option.networkAccessAllowed = YES;
            option.resizeMode = PHImageRequestOptionsResizeModeFast;
            [[PHImageManager defaultManager] requestImageDataForAsset:asset options:option resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                UIImage *resultImage = [UIImage imageWithData:imageData scale:0.1];
                if (completion) completion(resultImage,info,[[info objectForKey:PHImageResultIsDegradedKey] boolValue]);

            }];
        }
    }];
    return imageRequestID;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呐萨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莽囤,更是在濱河造成了極大的恐慌谬擦,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朽缎,死亡現(xiàn)場(chǎng)離奇詭異惨远,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)话肖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門北秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人最筒,你說我怎么就攤上這事贺氓。” “怎么了床蜘?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵辙培,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我邢锯,道長(zhǎng)虏冻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任弹囚,我火速辦了婚禮厨相,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸥鹉。我一直安慰自己蛮穿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布毁渗。 她就那樣靜靜地躺著践磅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灸异。 梳的紋絲不亂的頭發(fā)上府适,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天羔飞,我揣著相機(jī)與錄音,去河邊找鬼檐春。 笑死逻淌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疟暖。 我是一名探鬼主播卡儒,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼俐巴!你這毒婦竟也來了骨望?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欣舵,失蹤者是張志新(化名)和其女友劉穎擎鸠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缘圈,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劣光,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了准验。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赎线。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊饱,靈堂內(nèi)的尸體忽然破棺而出垂寥,到底是詐尸還是另有隱情,我是刑警寧澤另锋,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布滞项,位于F島的核電站,受9級(jí)特大地震影響夭坪,放射性物質(zhì)發(fā)生泄漏文判。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一室梅、第九天 我趴在偏房一處隱蔽的房頂上張望戏仓。 院中可真熱鬧,春花似錦亡鼠、人聲如沸赏殃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仁热。三九已至,卻和暖如春勾哩,著一層夾襖步出監(jiān)牢的瞬間抗蠢,已是汗流浹背举哟。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迅矛,地道東北人妨猩。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诬乞,于是被迫代替她去往敵國(guó)和親册赛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钠导,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容