需求效果圖:
1.gif
首先按可滑動(dòng)的分為三個(gè)組成部分,右下角的圖片可以自由方向滾動(dòng)無(wú)疑用scrollView實(shí)現(xiàn)很容易;
點(diǎn)擊刪除按鈕可以刪掉對(duì)應(yīng)的車源信息巨税,并且還帶有動(dòng)畫效果达吞,用tableView或者collectionView可以實(shí)現(xiàn)鸵隧;
于是乎桐愉,我這樣搭建:
Snip20161114_3.png
① 信息展示列表的邏輯
1、中間大圖—scrollView添加collectionView掰派,設(shè)置userInteractionEnabled為false从诲,
這樣手勢(shì)會(huì)直接作用在父視圖scrollView上;
2靡羡、每一個(gè)item添加tableView系洛,作為展示列表;
3略步、scrollView.contentSize = collectionView.bounds.size
4描扯、collectionView.flowLayout.itemSize = 屏幕寬/3,scrollView.contentSize
② 刪除cell需要改變scrollView.contentSize
_detailInfoCount--; // 必須對(duì)列表數(shù)量(numberOfItems)減1趟薄,不然刪除會(huì)報(bào)錯(cuò)
[_topIconListView deleteItemsAtIndexPaths:@[indexPath]];
[_detailCollectionView deleteItemsAtIndexPaths:@[indexPath]];
_detailScrollView.contentSize = CGSizeMake(_detailInfoCount*kAverageTableViewWidth, numberOfRows*rowHight*numberOfSections+numberOfSections*heightForHeaderInSection);
③ 判斷拖動(dòng)的是哪個(gè)view
定義三個(gè)View的tag枚舉值
typedef enum : NSUInteger {
TitleTableViewTag ,
DetailScrollViewTag ,
TopIconListViewTag ,
} currentScrollViewTag;
// 在開始拖動(dòng)的時(shí)候記錄tag
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
// 記錄上一個(gè)拖動(dòng)的view來確保再次滑動(dòng)是有慣性效果
_beforeScrollViewTag = _currentScrollViewTag;
_currentScrollViewTag = scrollView.tag;
}
④ 聯(lián)動(dòng)的核心代碼:
/**
判斷拖動(dòng)的view的tag進(jìn)行聯(lián)動(dòng)
*/
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (_currentScrollViewTag == TitleTableViewTag) {
CGFloat offSetX = _beforeScrollViewTag == TopIconListViewTag ? _topIconListView.contentOffset.x : _detailScrollView.contentOffset.x;
_detailScrollView.contentOffset = CGPointMake(offSetX, _titleTableView.contentOffset.y);
_topIconListView.contentOffset = CGPointMake(offSetX, 0);
return;
}
if (_currentScrollViewTag == DetailScrollViewTag) {
_titleTableView.contentOffset = CGPointMake(0, _detailScrollView.contentOffset.y);
_topIconListView.contentOffset = CGPointMake(_detailScrollView.contentOffset.x, 0);
return;
}
if (_currentScrollViewTag == TopIconListViewTag) {
CGFloat offSetY = _beforeScrollViewTag == TitleTableViewTag ? _titleTableView.contentOffset.y : _detailScrollView.contentOffset.y;
_detailScrollView.contentOffset = CGPointMake(_topIconListView.contentOffset.x, offSetY);
_titleTableView.contentOffset = CGPointMake(0, _detailScrollView.contentOffset.y);
return;
}
}
聯(lián)動(dòng)的時(shí)候如改變其他view的contentOffset.x就不要去改變contentOffset.y绽诚,這樣就可以保證慣性效果
此demo做了tableView性能優(yōu)化(按需加載、繪制圓角頭像等)
demo地址: https://github.com/qiven/ScorllContrastView
目前展示列表中的tableView無(wú)法做到按需加載杭煎,歡迎有此需求的朋友一起交流恩够!