1.要实现这个功能之前,我们先考虑一下,一个UIImageView 随着tableView 的下拉放大,我们的第一个想到的就是UIScrollerView的代理方法,由于UITableView继承UIScrollerView,因此tableView也具有UIScrollerView 的代理方法,因为UIIMageView 的放大是随着下拉UITableView 的变化而变化的,从中可读取contentOffset 属性已确定其滚动到的位置,常用如下方法:-(void)scrollViewDidScroll:(UIScrollView *)scrollView。
2.下面我们直接说说如何实现(含代码)
(1). 定义一个tableView的headView
UIView *headerView=[[UIView alloc] initWithFrame:CGRectMake(0,0,SCREEN_WIDTH,180)];
headerView.userInteractionEnabled=YES;
(2.)定一个一个UIImageView *backgroundImg=[[UIImageView alloc] initWithFrame:CGRectMake(0,0,SCREEN_WIDTH,KPersonHeadHeight)]
[backgroundImg setImage:[UIImage imageNamed:@"member_bg"];
backgroundImg.userInteractionEnabled=YES;
(3) 定义一个UIView为personHeadView,这个控件的作用就是距离tableViewHeadView 的底部距离一直不变。然后将该控件加到backgroundImg上。
[headerView addSubview:backgroundImg];
最后把 headerView 赋值为tableViewHeadView。
(3).最为关键的代码在这里
/****************************************************核心代码***********************************/
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat yOffset=scrollView.contentOffset.y;
if(yOffset<0){
CGFloat totalOffset=180+ABS(yOffset);
backgroundImg.frame=CGRectMake(0,yOffset,SCREEN_WIDTH,totalOffset);
personHeadView.frame=CGRectMake(0,totalOffset-180,SCREEN_WIDTH,180); 这个是tableViewHeadView 上的固定控件(距离tableViewHeadView底部距离一直不变)
}else{
CGFloat alpha=fabs(yOffset)/(180-64);
self.navIV.backgroundColor=[UIColor colorWithRed:253.0/255.0f green:131.0/255.0f blue:147.0/255.0f alpha:alpha];
}
}