類似于新浪微博個人主頁的UI效果在iOS中是很常見的, 實現的難度就在于既可以左右滑動, 也可以上下滑動.
通常的做法是在一個橫向滾動的ScrollView
上添加幾個豎向的TableVIew
, 最后加一個HeaderView
在ScrollView
的superView
上, 這么做的話會有一個問題就是HeaderView
無法豎向滑動.
有看到其它博客說給HeaderView
加一個滑動手勢, 來模擬TableView
的滑動, 但是就缺少了ScrollView
回彈的彈簧動畫, 再后來有自己來實現彈簧動畫的思路, 大佬果然棒棒噠, 什么困難都可以克服 ??
但是懶人懶辦法, 有一個最簡單有效的方法就是把TableVIew
的PanGesture
添加到最底層的superView
上就可以了, 我們只需要對他做一些控制.
- (void)_buildIndex {
NSInteger index = (NSInteger)(_mainScrollView.contentOffset.x / self.width);
index = MIN(_tableViews.count - 1, index);
index = MAX(0, index);
[self removePanGestureForIndex:_index];
_index = index;
[self addPanGestureForIndex:_index];
_currentIndex = index;
if (self.currentIndexDidChange) {
self.currentIndexDidChange(_currentIndex);
}
}
- (void)addPanGestureForIndex:(NSInteger)index {
if (index < _tableViews.count && index >= 0) {
UITableView *tb = _tableViews[index];
[self addGestureRecognizer:tb.panGestureRecognizer];
}
}
- (void)removePanGestureForIndex:(NSInteger)index {
if (index < _tableViews.count && index >= 0) {
UITableView *tb = _tableViews[index];
[self removeGestureRecognizer:tb.panGestureRecognizer];
}
}
最終實現效果如下:
Demo.gif
這里還有另外一位大佬寫的一個庫, 實現思路是相同的 HJTabViewController