仿知乎拖動廣告的實現iOS

HUMioo發表於2018-06-06

Demo傳送門:75億?的GitHub

仿知乎拖動廣告的實現iOS

實現過程

錯誤方向

一開始打算在使用tableview的cell中載入scrollview實現,然後發現非常吃記憶體,而且無法實時變化,背景圖片每次在拖動結束後才會改變,儘管方法實現在scrollViewDidScroll內,依然毫無卵用,遂斃了

正確方向-目前

將圖片設定在self.view上後新增tableview

    self.bkimv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"001"]];
    
    self.originalHeight = self.bkimv.bounds.size.height*(ScreenWidth*IMAGESCALE/self.bkimv.bounds.size.width);
    self.originalWidth = ScreenWidth*IMAGESCALE;
    
    self.bkimv.bounds = CGRectMake(0, 0, self.originalWidth, self.originalHeight);複製程式碼
    self.table.backgroundColor = [UIColor clearColor];
    [self.view addSubview:self.table];複製程式碼

給予作為廣告的cell一個背景色透明,使該cell能夠顯示圖片

///根據編輯狀態變化
    if (model.isShow) {
        self.contentView.backgroundColor = [UIColor clearColor];
        self.nameLabel.text = @"";
    }else {
        self.contentView.backgroundColor = [UIColor whiteColor];
        self.nameLabel.text = model.name;
    }
複製程式碼

scrollViewDidScroll內實現圖片位置的計算

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat w = self.originalWidth;//圖片寬度
    CGFloat h = self.originalHeight;//圖片高度
    CGFloat x = ScreenWidth/2;//中心點x座標
    CGFloat y = scrollView.contentOffset.y/2+self.originalHeight/3;//中心點y座標
    CGFloat scale = 1;//圖片移動時比例變化率
    if (ISSETSCALE) {
        scale = (1-scrollView.contentOffset.y/ScreenHeight);
    }
    
    NSIndexPath *path= [NSIndexPath indexPathForRow:8 inSection:0];
    CGRect rectInTableView = [self.table rectForRowAtIndexPath:path];
    CGRect rectInSuperview = [self.table convertRect:rectInTableView toView:[self.table superview]];
    //cell相對於螢幕位置
    
    NSLog(@"%f %f %f",scale, y , rectInSuperview.origin.y);
    
    self.bkimv.center = CGPointMake(x, y);
    if (rectInSuperview.origin.y <= (y-h*scale/2)) {
        //廣告cell到達圖片最上部時使圖片與cell同時移動
        self.bkimv.center = CGPointMake(x, rectInSuperview.origin.y+h*scale/2);
    } else if ((rectInSuperview.origin.y + ADCellHeight) >= (y+h*scale/2)) {
        //廣告cell到達圖片最底部時使圖片與cell同時移動
        self.bkimv.center = CGPointMake(x, (rectInSuperview.origin.y + ADCellHeight)-h*scale/2);
    } else {
        self.bkimv.bounds = CGRectMake(0, 0, w*scale, h*scale);
    }
}複製程式碼

OVER

順便圖片暴露死宅屬性

不說了我的肥宅快樂水快沒氣了

仿知乎拖動廣告的實現iOS


相關文章