现在许多应用中都会有下拉放大用户头像,上拉缩小用户头像的功能效果,今天就来实现如何随着滚动而进行缩放。
效果图:
先上思路:
既然是在导航栏上进行缩放,那就应该将图片添加到导航栏的titleView上,然后监听滚动事件,这时候最好先打印滚动的Y值,在分析进行判断然后设置比例,利用transfrom进行图片缩放。
关键代码:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat offsetY = scrollView.contentOffset.y + scrollView.contentInset.top;
CGFloat scale = 1.0;
// 放大
if (offsetY < 0) {
// 允许下拉放大的最大距离为200
// 这个值可以自由调整
scale = MIN(1.5, 1 - offsetY / 200);
} else if (offsetY > 0) { // 缩小
// 允许向上超过导航条缩小的最大距离为200
scale = MAX(0.5, 1 - offsetY / 200);
}
self.headerImageView.transform = CGAffineTransformMakeScale(scale, scale);
// 保证缩放后y坐标不变
CGRect frame = self.headerImageView.frame;
frame.origin.y = -self.headerImageView.layer.cornerRadius / 2;
self.headerImageView.frame = frame;
}