ok咨跌,上一次我給大家用一種方法實現(xiàn)了簡單的支付寶首頁樣式吕晌。
上一篇文章:http://www.reibang.com/p/658f2aeafa64
那篇文章里面方法有個一弊端仆邓,就是UITableView的高度和Cell的總高度一致,也就是UITableView不能滑動绘闷,UITableViewCell的復用機制頁就不起作用了忆肾。哈哈,懶人版的支付寶首頁樣式是可以這樣完成的戏仓。
這里就給大家講解一種新的仿支付寶樣式的方法疚宇,這種方法只是使用一個UITableView,而且不用用兩個UIScrollView嵌套赏殃,很方便而且UITableViewCell的復用機制也可以放心的使用敷待。先上動圖(哈哈哈,雖然看上去和上一個樣式一樣仁热,但是真的是兩種不同的代碼????):
接一下是層級關(guān)系圖片:
大家可以通過層級關(guān)系明確榜揖,此時整個控制器只有一個UITableView,我們在UITableView的taleViewHeaderView上添加一個支付的視圖股耽。
// 設(shè)置頭部視圖
self.headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.lyf_width, kHeaderHeight)];
// 將支付的視圖添加在頭部視圖上面
[self.headerView addSubview:self.payView];
self.tableHeaderView = self.headerView;
當UITableView滑動時根盒,改變self.payView的Y值,就可以實現(xiàn)視圖漸顯的動效物蝙,此時需要注意炎滞,需要動態(tài)改變self.headerView.layer.masksToBounds,至于原因嘛诬乞,大家可以思考一下册赛,實在想不明白就注釋一下對應(yīng)代碼再看效果:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat contentOffsetY = scrollView.contentOffset.y;
if (self.contentOffsetAction) {
self.contentOffsetAction(contentOffsetY);
}
if (contentOffsetY <= 0) {
// 當偏移量小于0時,頭部視圖的Y值跟隨偏移量上移
self.payView.lyf_y = contentOffsetY;
} else {
// 頭部視圖滾動差的效果
self.payView.lyf_y = contentOffsetY/2;
}
self.payView.contentOffsetY = contentOffsetY;
// 當contentOffsetY大于零時震嫉,打開裁剪功能森瘪。而小于零時,關(guān)閉裁剪
// 大家如果想知道不這樣做的結(jié)果票堵,就試著注釋一下下面的代碼試一試??扼睬。
self.headerView.layer.masksToBounds = contentOffsetY > 0;
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat contentOffsetY = scrollView.contentOffset.y;
if (contentOffsetY < -kHeaderHeight / 2) {
// 當結(jié)束滑動的偏移量小于-kHeaderHeight / 2,就開始刷新tableView
[self.mj_header beginRefreshing];
} else if (contentOffsetY > 0 && contentOffsetY < kHeaderHeight / 2) {
// 當偏移量大于0并且小于kHeaderHeight / 2悴势,就把偏移量設(shè)置在CGPointMake(0, 0)
[self setContentOffset:CGPointMake(0, 0) animated:YES];
} else if (contentOffsetY > kHeaderHeight / 2 && contentOffsetY < kHeaderHeight) {
// 當偏移量大于kHeaderHeight / 2并且小于kHeaderHeight窗宇,就把偏移量設(shè)置在CGPointMake(0, kHeaderHeight)
[self setContentOffset:CGPointMake(0, kHeaderHeight) animated:YES];
}
}
此時措伐,除了刷新控件在UITableViewHeaderView下面顯示的效果沒有實現(xiàn)外,其余的都很簡單军俊。那么最后就是實現(xiàn)這個效果了侥加,其實也很簡單,當大家設(shè)置好刷新方法之后粪躬,動態(tài)的改變其距離頂部的高度就可以了:
__weak __typeof(self)weakSelf = self;
// 下拉刷新
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf loadMoreData];
}];
self.tableView.mj_header.ignoredScrollViewContentInsetTop = -kHeaderHeight;
大家一定注意担败,self.tableView.mj_header.ignoredScrollViewContentInsetTop方法需要在設(shè)定好頭部刷新控件之后再調(diào)用。
ok镰官,代碼我會放在GitHub上面提前,喜歡的可以下載來看看,記得點個贊呦??朋魔。
GitHub:https://github.com/Fdevelopmenter/LYFTestAli2