IOS 仿餓了么點餐頁面效果—因時間原因界面不好看 但滑動效果已經(jīng)實現(xiàn)


最近一個項目涉及到類似于餓了么的點餐頁面,百度好久沒找到合適的Demo 只好動手寫一個。現(xiàn)在上代碼,感興趣的伙伴可以看一下,如出現(xiàn)BUG或有更好的建議歡迎提給我:1614056471

1.先說下點餐頁的難點:理清“主tableview”什么時候不能往上滑 什么時候不能往下滑 ?主tableview cell里面嵌套的tableView什么時候不能往下滑 什么時候不能往上滑 只要將上滑、下滑的限制條件理清,整個點餐功能就不難做了


2.先看一下demo的整體結(jié)構(gòu):整個點餐功能分成了三個控制器(為了方便管理tableView代理)“點菜”的相關(guān)功能實現(xiàn)全部放到了“點餐控制器”,“商家”的相關(guān)功能實現(xiàn)全部放到了“商家控制器” ?“主控制器”對另外兩個字控制器進行管理。

3.主控制器(ELeMeOrderPageViewMainController)里面的關(guān)鍵代碼:/**

UIScrollViewDelegate

*/

- (void)scrollViewDidScroll:(UIScrollView*)scrollView {

if([scrollViewisEqual:self.mainTableView]) {

//

//NSLog(@"%lf, %lf", scrollView.contentOffset.y, scrollView.contentSize.height-scrollView.bounds.size.height);

if(scrollView.contentOffset.y>= (scrollView.contentSize.height-scrollView.bounds.size.height-0.5)) {//mainTableView滾動不能超過最大值

self.offsetType=OffsetTypeMax;

scrollView.contentOffset=CGPointMake(scrollView.contentOffset.x, scrollView.contentSize.height-scrollView.bounds.size.height);//(scrollView.contentSize.height-scrollView.bounds.size.height):mainTableView可以滾動的最大偏移距離超過等于最大偏移距離不可以再向上滑動

_mainTableViewOldOffSet= scrollView.contentSize.height-scrollView.bounds.size.height;

}elseif(scrollView.contentOffset.y<=0) {

self.offsetType=OffsetTypeMin;

}else{

self.offsetType=OffsetTypeCenter;

}

if((self.levelListView.selectedIndex==0&&self.subLeftVC.offsetType!=OffsetTypeMin)&&(self.subLeftVC.rightTVScrollDown||(scrollView.contentOffset.y-_mainTableViewOldOffSet<0))) {//self.subLeftVC.offsetType != OffsetTypeMin時_mainTableView不能向下滑動(注釋:當點菜頁面顯示并且商品列表tableView未達到最大偏移量之前,mainTableView不能向下滑動)

scrollView.contentOffset=CGPointMake(scrollView.contentOffset.x,_mainTableViewOldOffSet);

}

if(self.levelListView.selectedIndex==1&&self.subRightVC.offsetType!=OffsetTypeMin) {//當商家頁面顯示時,商家信息tableview偏移量不是最小狀態(tài)說明mainTableView已經(jīng)滾動到了最大值在商家信息tableview偏移量未達到最小偏移量之前mainTableView需要保持原來的偏移量不變

scrollView.contentOffset=CGPointMake(scrollView.contentOffset.x,_mainTableViewOldOffSet);

}

_mainTableViewOldOffSet= scrollView.contentOffset.y;

}

if([scrollViewisEqual:self.subScrollView]) {

[self.levelListViewchangeLineViewOffsetX:self.subScrollView.contentOffset.x];

}

}

4.點餐控制器(ELeMeOrderPageLeftViewController)關(guān)鍵代碼:

#pragma mark --- UIScrollViewDelegate ---

- (void)scrollViewDidScroll:(UIScrollView*)scrollView {

ELeMeOrderPageViewMainController*vc = (ELeMeOrderPageViewMainController*)[selfparentViewController];//父控制器

NSLog(@"aaaaaaaaaaaaaa=====%f",scrollView.contentOffset.y);

if(scrollView==self.rightTableView&&!_didSelectLeftTVCell) {

if(scrollView.contentOffset.y<=0) {//rightTableView不能小于最小值(不能下滑的條件)

self.offsetType=OffsetTypeMin;

scrollView.contentOffset=CGPointZero;

}else{

self.offsetType=OffsetTypeCenter;

}

//聯(lián)動邏輯:rightTableViews頂部section頭消失出現(xiàn)實現(xiàn)leftTableView選擇聯(lián)動

if(scrollView.contentOffset.y>_oldRightOffsetY) {

_rightTVScrollUp=YES;

_rightTVScrollDown=!_rightTVScrollUp;

}elseif(scrollView.contentOffset.y<_oldRightOffsetY)

{

_rightTVScrollUp=NO;

_rightTVScrollDown=!_rightTVScrollUp;

}

if(vc.offsetType!=OffsetTypeMax&&_rightTVScrollUp) {//vc.offsetType!= OffsetTypeMax時rightTableView不能向上滑動(不能上滑的條件)

scrollView.contentOffset=CGPointMake(0,_oldRightOffsetY);

}

if(vc.offsetType==OffsetTypeMax) {

}

NSLog(@"ccccccccccc=====%f",scrollView.contentOffset.y);

_oldRightOffsetY=floorf(scrollView.contentOffset.y);

}

}

5.商家控制器里的關(guān)鍵代碼與上面類似,不再累述,實現(xiàn)滑動效果還有一個重要的點:當滑動作用到商品列表tableView或商家信息tableview上時,主控控制器主tableview也必須能響應(yīng)滑動,因此繼承商品列表tableView 與商家信息tableview 都繼承了LWGesturePenetrationTableView,LWGesturePenetrationTableView:里實現(xiàn)的方法#pragma mark --- other ---

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(nonnullUIGestureRecognizer*)otherGestureRecognizer

{

returnYES;

}

6.這是我目前想到的實現(xiàn)方法,要是有更好的實現(xiàn)歡迎分享,具體實現(xiàn)下載demo吧,純原創(chuàng) 希望在git上給顆星。


demo下載地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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