實現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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章