
下拉放大
在項目中我們有時候想實現(xiàn)tableView的Header下拉放大的效果,自己沒有能力就經常用到第三方,很是麻煩,今天總結了兩種自己用很少代碼就能實現(xiàn)這種效果的方法,一起來看一下吧
首先設置表視圖的頭視圖,并遵守<UIScrollViewDelegate>代理協(xié)議
//要縮放的頭部圖片
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;
}
}