实现Path橡皮筋效果,兼容IOS6

在ios5之前实现,图片拉伸的橡皮筋效果非常容易,只是需要设置tableView的tableHeaderView,然后滚动的时候调整tableHeaderView的frame为

if(scrollView.contentOffset.y<0)
{
	header.frame  = CGRectMake(0,scrollView.contentOffset.y,320,DEFAULT_SIZE-scrollView.contentOffset.y)
}
else{
	header.frame  =  CGRectMake(0,0,320,DEFAULT_SIZE);
}

实现上面的代码即可

可是在IOS6里面,tableHeaderView的frame不能设置成负数,需要越过tableHeaderView。下面详细说明这个过程。

1、由于还有头像等信息的存在,tableHeaderView还是要使用。只是需要保证是透明的

2、这个table的下面建一个view(要变大和变小的图片),保证和tableHeaderView的高度是一样的。

3、然后滚动的时候调整view背后的图片的大小。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if(scrollView.contentOffset.y < 0){
        [self setBackImageFrame:DEFAULT_HEIGHT - scrollView.contentOffset.y originalY:0];
    }else {
        [self setBackImageFrame:DEFAULT_HEIGHT originalY:(0-scrollView.contentOffset.y)];
    }
}

-(void)setBackImageFrame:(CGFloat)height originalY:(CGFloat)y
{
    [_backImageView setFrame:CGRectMake(0, y, 320, height)];

    //控制一下计算图片高度的次数,防止不必要的计算
    if(_preHeight != height){
        //截取图片的中间部分显示
        CGRect rect = CGRectMake(0, 0, _backImage.size.width, _backImage.size.height);
        float heightLimit =height*2;
        if(_backImage.size.width > 640 && _backImage.size.height > heightLimit){
            rect   = CGRectMake(0, (_backImage.size.height/(_backImage.size.width/640) - heightLimit)/2, _backImage.size.width, heightLimit);
        }else if(_backImage.size.height > 300){
            rect  = CGRectMake(0, (_backImage.size.height- heightLimit)/2, _backImage.size.width, heightLimit);
        }
        
        CGImageRef  cgImage  = CGImageCreateWithImageInRect([_backImage CGImage], rect);
        [_backImageView setImage:[UIImage imageWithCGImage:cgImage]];
        CGImageRelease(cgImage);
    }
    _preHeight = height;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值