前言
高仿貓眼選票模塊以故,因?yàn)楣緲I(yè)務(wù)需求屯耸,要對(duì)接貓眼電影,網(wǎng)上也沒有很完整的庫送丰,所以就結(jié)合了ZFSeatsSelection以及其他幾個(gè)庫封裝一個(gè)符合公司要求的電影選座模塊缔俄。
在基礎(chǔ)的選座功能上實(shí)現(xiàn)了情侶座的選擇和是否落單的判斷
實(shí)現(xiàn)效果
實(shí)現(xiàn)方式
選座模塊總體分為三塊:
- 座位圖,貓眼數(shù)據(jù)中會(huì)包含行列信息,將座位根據(jù)行列信息畫到ScrollView
- 索引俐载,根據(jù)總行數(shù)畫出索引條蟹略,在視圖縮放時(shí)根據(jù)座位圖的最新高度調(diào)整索引條的大小、位置
- 小地圖遏佣,將座位圖截圖放到小地圖上挖炬,在移動(dòng)、縮放時(shí)根據(jù)當(dāng)前座位圖顯示范圍經(jīng)轉(zhuǎn)換坐標(biāo)状婶、然后等比例縮放就有了小地圖中紅框的范圍
CGRect displayFrame = CGRectMake(self.contentOffset.x, self.contentOffset.y, self.width, self.height);
CGRect contentDisplayFrame = CGRectIntersection(displayFrame, _contentView.frame);
contentDisplayFrame = [self convertRect:contentDisplayFrame toView:_contentView];
CGFloat scale = (_indicatorView.width - 6) / _contentView.width;
[_indicatorView updateMiniIndicatorWithDisplayRect:(CGRect){
contentDisplayFrame.origin.x * scale * self.zoomScale,
contentDisplayFrame.origin.y * scale * self.zoomScale,
contentDisplayFrame.size.width * scale * self.zoomScale,
contentDisplayFrame.size.height * scale * self.zoomScale
}];
- 接下來就是處理縮放選中等功能意敛,借助系統(tǒng)UIScrollView的縮放功能可以很容易實(shí)現(xiàn),注意要將座位圖整體座位要縮放的單位膛虫,不要將索引草姻、logo等其他不需要縮放的視圖放到座位圖上面
- 最后就是是否落單的判斷,檢查規(guī)則:
- 只檢查同行
- 不檢查情侶座位
- 只有一邊有空座位則為不落單
- 兩邊都有空座且至少有一邊為單個(gè)座位為落單
到此,整個(gè)功能就已經(jīng)實(shí)現(xiàn)稍刀,代碼已經(jīng)發(fā)布到Github上面: YSSeatsPicker