在项目中我们有时候想实现tableView的Header下拉放大的效果,自己没有能力就经常用到第三方,很是麻烦,今天总结了两种自己用很少代码就能实现这种效果的方法,一起来看一下吧
首先设置表视图的头视图,并遵守<UIScrollViewDelegate>代理协议
//要缩放的头部图片
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"photo"]];
// 设置tableView头部视图,必须设置头部视图背景颜色为clearColor,否则会被挡住
self.imageView.frame = CGRectMake(0, 0, self.view.frame.size.width, 200);
[self.tableView insertSubview:self.imageView atIndex:0];
//插入头部视图
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 200)];
headerView.backgroundColor = [UIColor clearColor];
self.tableView.tableHeaderView = headerView;
方法一、拿到scrollview的偏移量计算下拉imageview的frame,使其imageview的宽高增大。上拉的时候恢复原来的frame
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
// 获取当前偏移量
CGFloat offsetY = scrollView.contentOffset.y;
if (offsetY < 0) {
self.imageView.frame = CGRectMake(offsetY, offsetY, scrollView.bounds.size.width - offsetY * 2, 200 - offsetY);
} else {
self.imageView.frame = CGRectMake(0, 0, scrollView.bounds.size.width, 200);
}
}
方法二、再向上拉的过程中要保证imageview不会进行缩放,只是改变下imageview的y轴的值
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat offsetY = scrollView.contentOffset.y + scrollView.contentInset.top;
CGFloat scale = 1.0;
if (offsetY < 0) {
//向下拉
scale = MIN(2.5, 1 - offsetY / 200);
//运用CGAffineTransformMakeScale使imageview缩放
self.imageView.transform = CGAffineTransformMakeScale(scale, scale);
CGRect frame = self.imageView.frame;
frame.origin.y = offsetY;
self.imageView.frame = frame;
}else if(offsetY > 0){
//向上拉
CGRect frame = self.imageView.frame;
frame.origin.y = -offsetY/200;
self.imageView.frame = frame;
}
}