前言:
多張圖片的展示技術(shù)积瞒,以前一直用第三方實(shí)現(xiàn)。其實(shí)自己很想自己實(shí)現(xiàn)一次隧魄。自從嘗試過微醫(yī)的圖文問診的圖片展示功能,就一直準(zhǔn)備自己仿寫一套自己代碼隘蝎。由于第一版本時間緊張购啄,故沒有實(shí)現(xiàn)這個個功能。但是私下一直在研究嘱么。應(yīng)無名建議在問診第三個版本中終于要加這個板塊了。個人感覺該模塊運(yùn)用范圍挺廣泛的曼振,所以分享一下實(shí)現(xiàn)方式。
從兩個模塊分享這次的話題:
1:自定義具有縮放功能的WMImageview拴测。
2:進(jìn)入相冊,并選擇多張圖片集索,圖片的展示和刪除邏輯屿愚。
## 自定義WMImageview
1:在另外一篇文章中已經(jīng)說明汇跨。這里不做詳細(xì)介紹妆距。
2:下面我們進(jìn)入主題。先上一張邏輯圖娱据,整個實(shí)現(xiàn)流程是按這個邏輯圖走下去的蚪黑。
首先是展示縮略圖的展示頁面,這個頁面原理很簡單就是一個瀑布流中剩。但是這個頁面卻有兩中cell展示忌穿,一種是展示縮略圖的结啼,一種是展示引導(dǎo)頁面的。而且展示引導(dǎo)頁面的數(shù)據(jù)永遠(yuǎn)在最后的位置放著郊愧。為了方便對數(shù)據(jù)源的管理我申明了兩個數(shù)組
@property (nonatomic,strong)NSMutableArray *guidanceArray;//用來裝引導(dǎo)頁面
@property (nonatomic,strong)NSMutableArray *photosArray;//用來裝圖片源
在數(shù)據(jù)源中需要判斷。self.photos的數(shù)目不等于六属铁,說明圖片沒有達(dá)到我們需求的6張。這個時候澜公,就需要把索引圖片顯示出來。
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
? ? ?if (self.photos.count!=6) {
? ? ? ? ?return self.guidanceArray.count+self.photos.count;
? ? ?}
? ? ?else{
? ? ? ? ? return self.photos.count;
? ? ?}
?}
在下面方法中巧妙的用indexPath.row+1 于self.photos的數(shù)目進(jìn)行比較。如果前者大于后者說明多的那一個cell就是我們用來展示索引圖的迹辐。
''- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
''? ? if (indexPath.row+1>self.photos.count) {
''? ? ? ? WMGuidanceCollectionViewCell * item = [collectionView dequeueReusableCellWithReuseIdentifier:@"MGuidanceCollectionViewCell" forIndexPath:indexPath];
''? ? ? ? return item;
''? ? }
''? ? else{
''? ? ? ? WMImageCollectionViewCell * item = [collectionView dequeueReusableCellWithReuseIdentifier:@"imageCollectionViewCell" forIndexPath:indexPath];
''? ? ? ? item.delegate=self;
''? ? ? ? item.deletePhoto.tag=indexPath.row;
''? ? ? ? item.showImageView.image =self.photos[indexPath.row];
''? ? ? ? return item;
''? ? }
'' }
同上面一樣的道理明吩。在點(diǎn)擊事件也會有不同的響應(yīng)。
''- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
''? ? if (indexPath.row+1>self.photos.count) {
''? ? ? ? [self changedImageAction];
''? ? ? ? return;
''? ? }
''? ? [self setupView:indexPath.row];
'' }
''
多張圖片的展示用UIScrollView實(shí)現(xiàn)的居多印荔,但是考慮到資源的問題,我準(zhǔn)備用UICollectionView作為容器來展示嘿悬。UICollectionView的cell的復(fù)用機(jī)制,當(dāng)展示的圖片很多時善涨,就可以在性能上有很大的提升。