发现很多App的个人详情页有下拉放大顶部背景图这种动效,本文选择实现类似支付宝个人主页的这种效果,如图:
原理:
原理也很简单,就是设置tableView的contentInset属性,让向下偏移一定高度开始布局,backHeight就是顶部背景视图的高度:
_tableView.contentInset = UIEdgeInsetsMake(backHeight, 0, 0, 0);
然后在scrollView滑动代理里面动态改变顶部背景视图的高度:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint point = scrollView.contentOffset;
if (point.y < -backHeight) {
CGRect rect = _backImageView.frame;
rect.origin.y = point.y;
rect.size.height = -point.y;
_backImageView.frame = rect;
}
}
注意:
顶部背景视图的imageView需要设置backImageView.clipsToBounds = YES以及backImageView.contentMode = UIViewContentModeScaleAspectFill属性,本案例中下拉的过程中先是逐渐显示图片其余部分,然后再放大显示的,这是因为一开始imageView的宽高比和图片实际宽高比不一致导致的,如果设置成一致,那么一开始下拉的时候就会有放大的效果。
代码地址:github