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