PHImageManager

如果看過了之前的三片文章牍白,其實(shí)會發(fā)現(xiàn)自始至終帕胆,除了有幾個和系統(tǒng)的交互會展示一張圖片外儒老,一張圖片都沒有看到囚衔,我們一直看到的只是一個數(shù)字或者簡單的信息。
如果一定要來做個比喻的話稳衬,前面介紹的都是準(zhǔn)備的子彈砰碴,現(xiàn)在缺少一個能使用子彈的槍,而且是沖鋒槍,而這個沖鋒槍就是PHImageManager辛萍。
通過PHImageManager我們可以獲取到確切的圖片并展示出來,其使用過程也很簡單传睹,針對Image邢隧、Live Photo纫谅、Video都有不同的方法相對應(yīng)询吴。
下面就簡單的看看Image相關(guān)的使用吧。

PHImageManager

注意??:該類下的size都是像素單位,并不是之前常用的點(diǎn)惩激。因?yàn)樘O果的不同手機(jī)的分辨率不同店煞,所以在得到像素之前,要先獲取比例风钻,使用方法[UIScreen mainScreen].scale即可獲取到顷蟀,然后就可轉(zhuǎn)換為相應(yīng)的像素單位。

其使用步驟骡技,蘋果在其官方文檔中也做了如下說明:
1鸣个、使用PHAsset獲取到你想要的資源
2、使用類方法[PHImageManager defaultManager]獲取到PHImageManager對象
3布朦、調(diào)用PHImageManager相關(guān)的方法獲取數(shù)據(jù)

上面的三步囤萤,最難的就是第三步,因?yàn)檫@里的每個方法的注意點(diǎn)都不一樣是趴。目前涛舍,就只是針對圖片的兩個方法做個簡單的介紹吧,其他的如果在后面有需求或者時間唆途,再做更新:

- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;
  • - (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
    參數(shù)說明:
    1富雅、asset:要展示的那個圖片的資源
    2、targetSize:想要返回的圖片的尺寸窘哈,注意這里的單位是像素吹榴;另外,還有一個全局常量滚婉,用來表示圖片的原始尺寸或者盡可能大的尺寸:PHImageManagerMaximumSize图筹,使用該常量,會忽略參數(shù)contentMode让腹,它一般得到的是原圖
    3远剩、contentMode:是個枚舉,有兩個值可供選擇:PHImageContentModeAspectFit(默認(rèn))PHImageContentModeAspectFill其意義和UIImageView的contentMode是相通的骇窍,前者按比例放大瓜晤,直到有一邊到了邊界就不再放大,該模式下你會看到完整的圖片腹纳,但是有可能會有空白痢掠;后者按比例放大驱犹,直到兩條邊里的最后一對到達(dá)邊界,該模式下的到的圖片可能會存在有一對邊超出邊界的情況足画,造成圖片缺失雄驹。
    4、options:用來定義一些屬性淹辞,其中最常用的屬性應(yīng)該是isSynchronous医舆,該屬性定義了是異步執(zhí)行還是同步執(zhí)行,需要注意的是如果是同步執(zhí)行的話象缀,該請求是不能被停止的蔬将;另一個屬性是networkAccessAllowed,表示是否允許從iCloud請求圖片央星。

需要注意的是霞怀,如果實(shí)在異步線程中,這里的返回不一定就是在異步線程莉给,也不一定就是在主線程里烦。
1、options的synchronous設(shè)置為YES

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init];
        options.synchronous = YES;
        [[PHImageManager defaultManager] requestImageForAsset:_dataSourceArr.firstObject.asset targetSize:_thumbilImageSize contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            NSLog(@"%@", [NSThread currentThread]);
        }];
NSLog(@"finished");
    });
image.png

這種情況下禁谦,打印log可以看出是在當(dāng)前線程同步執(zhí)行返回的,而且只執(zhí)行一次
2废封、options為nil州泊,或者說options的synchronous設(shè)置為NO

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"before:%@", [NSThread currentThread]);
        [[PHImageManager defaultManager] requestImageForAsset:_dataSourceArr.firstObject.asset targetSize:_thumbilImageSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            NSLog(@"request:%@", [NSThread currentThread]);
        }];
        NSLog(@"finished");
    });
image.png

打印log可以看出,會在當(dāng)前線程異步執(zhí)行多次漂洋,除了最后一次會在主線程返回之外遥皂,其他的都在當(dāng)前線程執(zhí)行。
3刽漂、size為PHImageManagerMaximumSize

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"before:%@", [NSThread currentThread]);
        [[PHImageManager defaultManager] requestImageForAsset:_dataSourceArr.firstObject.asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            NSLog(@"request:%@", [NSThread currentThread]);
        }];
        NSLog(@"finished");
    });
image.png

從log中可以看出演训,異步執(zhí)行,只執(zhí)行一次贝咙,并且是在主線程中样悟。

  • - (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庭猩,隨后出現(xiàn)的幾起案子窟她,更是在濱河造成了極大的恐慌,老刑警劉巖蔼水,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件震糖,死亡現(xiàn)場離奇詭異,居然都是意外死亡趴腋,警方通過查閱死者的電腦和手機(jī)吊说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門论咏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颁井,你說我怎么就攤上這事厅贪。” “怎么了蚤蔓?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵卦溢,是天一觀的道長。 經(jīng)常有香客問我秀又,道長单寂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任吐辙,我火速辦了婚禮宣决,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昏苏。我一直安慰自己尊沸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布贤惯。 她就那樣靜靜地躺著洼专,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孵构。 梳的紋絲不亂的頭發(fā)上屁商,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音颈墅,去河邊找鬼蜡镶。 笑死,一個胖子當(dāng)著我的面吹牛恤筛,可吹牛的內(nèi)容都是我干的官还。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼毒坛,長吁一口氣:“原來是場噩夢啊……” “哼望伦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起煎殷,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤屡谐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝌数,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕掏,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年顶伞,在試婚紗的時候發(fā)現(xiàn)自己被綠了饵撑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剑梳。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滑潘,靈堂內(nèi)的尸體忽然破棺而出垢乙,到底是詐尸還是另有隱情,我是刑警寧澤语卤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布追逮,位于F島的核電站,受9級特大地震影響粹舵,放射性物質(zhì)發(fā)生泄漏钮孵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一眼滤、第九天 我趴在偏房一處隱蔽的房頂上張望巴席。 院中可真熱鬧,春花似錦诅需、人聲如沸漾唉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赵刑。三九已至,卻和暖如春场刑,著一層夾襖步出監(jiān)牢的瞬間料睛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工摇邦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屎勘。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓施籍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親概漱。 傳聞我的和親對象是個殘疾皇子丑慎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

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

  • 父類:NSObject 提供獲取或生成預(yù)覽縮略圖和全尺寸圖片,或者視頻數(shù)據(jù)的方法瓤摧。 一竿裂、概述 使用這些方法來獲取全...
    Shmily落墨閱讀 10,506評論 5 6
  • 一、 PhotoKit的變量: PHAdjustmentData: When a user edits an as...
    漓汐Arthur閱讀 1,650評論 1 3
  • 本文轉(zhuǎn)載自Kayo Lee發(fā)表的文章照弥,本文鏈接:http://kayosite.com/ios-developme...
    JackyHeWei閱讀 10,428評論 10 10
  • 《七絕·緬運(yùn)生》(新韻) 溫志齡 酷嗜吟哦筆未沉腻异,籌謀雅社建奇勛。 黃泉路上當(dāng)舒慰这揣,...
    碧野牧歌閱讀 200評論 2 3
  • 下午看到朋友圈裡悔常,小甜妹發(fā)了一條感慨:今天打了一天滴滴影斑,真方便!以後可以不用開車上班了机打。 我接著回覆說:用優(yōu)步更便...
    林素兮閱讀 316評論 11 4