tableView的Header下拉放大

下拉放大

在项目中我们有时候想实现tableView的Header下拉放大的效果,自己没有能力就经常用到第三方,很是麻烦,今天总结了两种自己用很少代码就能实现这种效果的方法,一起来看一下吧

首先设置表视图的头视图,并遵守代理协议

    //要缩放的头部图片
    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;
    }
}

你可能感兴趣的:(tableView的Header下拉放大)