之前寫過(guò)一個(gè)相冊(cè)選擇器昨忆,但是特別的簡(jiǎn)陋(手動(dòng)滑稽)丁频。所以。邑贴。就決定了寫一個(gè)好一點(diǎn)的相冊(cè)選擇器席里,就是MSTImagePickerController啦。
先上圖:
首先拢驾,在這里說(shuō)奖磁。因?yàn)檫€是小白,所以這個(gè)相冊(cè)還是有許多不盡如人意的地方繁疤,以后會(huì)多加改正的咖为,希望大家多多支持~~
優(yōu)勢(shì)
- 根據(jù)時(shí)間進(jìn)行分組(年、月稠腊、日)
- 可識(shí)別已選擇過(guò)的照片
- 可以返回 LivePhoto
- 根據(jù)主題類型顯示
- 自定義進(jìn)入方式
- 還有許多的自定義屬性~
簡(jiǎn)單介紹
言歸正傳躁染,這個(gè)相冊(cè)使用的 framework 是 PHPhotos。也就是說(shuō)架忌,只支持iOS8以上的系統(tǒng)吞彤。
MSTImagePickerController(以下簡(jiǎn)稱 MSTPicker )一共有三中進(jìn)入的方式:
- 進(jìn)入相冊(cè)選擇界面。(演示的第一種情況)
- 直接進(jìn)入相機(jī)膠卷,并且可以返回到相冊(cè)選擇界面饰恕。(演示的第二種情況)
-
還有一種情況就是直接進(jìn)入相機(jī)膠卷挠羔,不能返回相冊(cè)選擇界面。
相冊(cè)讀取代碼沒(méi)什么好說(shuō)的埋嵌,基本上都差不多:
可以看到里面的紅字部分:
- 第一個(gè)(creationDate)是根據(jù)創(chuàng)建時(shí)間來(lái)進(jìn)行升序或降序的排列褥赊。
- 第二個(gè)(mediaType == %d),這個(gè)是用來(lái)過(guò)濾掉不希望讀取的類型莉恼。這里是為了只顯示圖片。
相冊(cè)讀取完了速那,肯定就到了讀取相冊(cè)中每個(gè)圖片的具體信息了:
在預(yù)覽的時(shí)候俐银,我只是將圖片按照當(dāng)前設(shè)備屏幕大小來(lái)進(jìn)行讀取,這樣是為了減少內(nèi)存的使用端仰。并且在滑動(dòng)的時(shí)候捶惜,只會(huì)加載模糊圖片,只有定位到某一張圖片的時(shí)候才會(huì)加載清晰圖片荔烧,在上面的 GIF 中可以看到吱七。
MSTPicker可以根據(jù)圖片的創(chuàng)建時(shí)間進(jìn)行分類,有三個(gè)檔:年鹤竭、月踊餐、日。
MSTPicker在需要分類的情況下臀稚,有一個(gè)不夠完善的地方吝岭,之后會(huì)說(shuō)到。
MSTPicker 是有照相和錄像功能的吧寺,但是在已經(jīng)勾選了圖片的情況下窜管,是無(wú)法錄像的。同樣的稚机,在勾選了圖片的情況下幕帆,也是無(wú)法選定已經(jīng)有的視頻的。
監(jiān)聽(tīng)系統(tǒng)相冊(cè)變化赖条,就是在系統(tǒng)相冊(cè)增刪改的時(shí)候失乾,會(huì)收到一個(gè)通知,從而在縮略圖界面有相應(yīng)的改變谋币,這個(gè)方法比較長(zhǎng):
這個(gè)是根據(jù)官方文檔中的示例代碼進(jìn)行改進(jìn)的仗扬。這里要感謝一下 stackOverflow上 的 batkru 同學(xué)關(guān)于在監(jiān)聽(tīng)方法中試圖移除相同的 indexPath 的崩潰問(wèn)題的解答±俣睿灰常感謝T绨拧!诅蝶!
MSTPicker 也是可以選定和展示 Live Photo 的退个,因?yàn)槟M器的緣故募壕,就沒(méi)在這里展示,具體可以看一下源代碼语盈。
MSTPicker 的返回是通過(guò)代理協(xié)議返回的舱馅,并且視頻和圖片是分開返回的。視頻返回 URL刀荒,圖片和 Live Photo 返回的數(shù)組:
在剩下的代嗤,我個(gè)人覺(jué)得就是界面的勾勾畫畫了,也就不在這里贅述了缠借,想要看得童鞋可以看一下 MSTPicker 的 Github:https://github.com/immustard/MSTImagePickerController
等待改進(jìn)
因?yàn)?MSTPicker 還是第一版干毅,所以有很多地方需要改進(jìn)和加強(qiáng),下面來(lái)列舉一些:
根據(jù)已經(jīng)選定的圖片重新打開 MSTPicker泼返,并且選定的圖片標(biāo)記硝逢。縮略圖界面相機(jī)圖標(biāo)動(dòng)態(tài)顯示自定義相機(jī)界面。
自定義視頻展示界面绅喉。
選擇 GIF 圖渠鸽。
可以拍照按鈕放在外部。
增加最小的可以選定的圖片尺寸柴罐。
攝像頭徽缚、麥克風(fēng)授權(quán)返回。
剩下的在代碼中有所標(biāo)注丽蝎。
還有一點(diǎn)最重要的猎拨,也是我最希望改進(jìn)的就是圖片的壓縮問(wèn)題。尤其是原圖屠阻,舉個(gè)??:在系統(tǒng)相冊(cè)中讀取出原圖的 imageData 的大小為1.9M红省,但是轉(zhuǎn)換為 UIImage 的時(shí)候,大小就暴漲到 7.9M 国觉,有哪位大神幫小弟解釋一下么吧恃。。麻诀。
感謝
因?yàn)楸救耸莻€(gè)小白痕寓,所以很多東西都是在摸索中前進(jìn)的,特此感謝一下給予我?guī)椭奈恼潞痛笊瘢?/p>
沒(méi)有找到最初的出處:ScollView 圖片縮放
還有許多沒(méi)有記錄下來(lái)文章(其實(shí)是蝇闭,實(shí)在不知道原作者是誰(shuí)了)呻率。
拿本記一下!呻引!這里要重點(diǎn)感謝一下 TZImagePickerController 這個(gè)開源庫(kù)給了很多很多的幫助礼仗,當(dāng)然了,不是抄襲。在 TZImagePickerController 的基礎(chǔ)上元践,MSTPicker 有了很多的改進(jìn)韭脊。非常非常非常感謝!5ヅ浴沪羔!
最后
最后希望各位大神可以給出指導(dǎo)意見(jiàn),這是本人的第一個(gè)github代碼象浑,我希望可以進(jìn)行不斷的完善蔫饰,多謝多謝。愉豺。
再次奉上 Github 地址:https://github.com/immustard/MSTImagePickerController
多謝大家支持死嗦!
最近才看到,代碼上有人反饋的問(wèn)題粒氧,真是尷尬。节腐。(好像兩個(gè)多月了都)
不過(guò)還好解決了外盯,順帶解決了點(diǎn)擊選中按鈕時(shí)只有iOS9之后才能添加動(dòng)畫的問(wèn)題。
最近還想著給這個(gè)相冊(cè)添加一些新的東西翼雀,因?yàn)橹鞍l(fā)現(xiàn)微信的相冊(cè)的功能變得更強(qiáng)大了饱苟。
再次最后
希望大家多多提意見(jiàn)!謝謝~