自定义下拉控件

需要非常了解tabview的offset、inset、frame这3个属性,通过计算并控制这3个属性来显示下拉刷新操作

- (void)dealHeaderRefresh{
    CGFloat offsetY = -(self.tableView.contentInset.top + self.headerView.gg_height);
    if (self.tableView.contentOffset.y <= offsetY) { // tabview的偏移量小于等于 (内边距 + 标题栏高度),表示要开始刷新了
        self.headerLabel.text = @"松开刷新";
        self.headerLabel.backgroundColor = [UIColor greenColor];
    }else{
        self.headerLabel.text = @"下拉可以刷新";
        self.headerLabel.backgroundColor = [UIColor redColor];
    }
}

- (void)headerBeginRefresh{
    
    if (self.isHeaderRefresh) return;
    
    self.headerRefresh = YES;
    self.headerLabel.text = @"正在刷新";
    self.headerLabel.backgroundColor = [UIColor orangeColor];
    
    [UIView animateWithDuration:0.3 animations:^{
        
        // 修改tabview的内边距,让用户看到正在刷新这几个字
        UIEdgeInsets contentInset = self.tableView.contentInset;
        contentInset.top += self.headerView.gg_height;
        self.tableView.contentInset = contentInset;
        
        self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, - contentInset.top);
    }];
    
    // 发送数据请求
    [self loadNewTopics];
}

- (void)headerEndRefresh{
    
    self.headerRefresh = NO;
    [UIView animateWithDuration:0.3 animations:^{
        
        // 修改tabview的内边距,隐藏起来
        UIEdgeInsets contentInset = self.tableView.contentInset;
        contentInset.top -= self.headerView.gg_height;
        self.tableView.contentInset = contentInset;
    }];
    self.headerLabel.text = @"下拉可以刷新";
    self.headerLabel.backgroundColor = [UIColor redColor];
}

演示效果.gif

你可能感兴趣的:(自定义下拉控件)