UITableView+UIHeadView上控件位置不动+UIImageView 下拉放大

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];

    }

}







你可能感兴趣的:(ios,app,ios,界面,uiimageview,uitableview)