在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;
}