实现tableView双滚动

即最靠近屏幕中心的cell显示行高最大, 越远离越小

自定义cell类中
正常创建imageview, 但, 注意上下的约束, 上超出contentview20, 下超出80

[_imageViewOfPic mas_makeConstraints:^(MASConstraintMaker *make) {
    
    make.left.right.mas_equalTo(self.contentView).offset(0);
    
    make.top.mas_equalTo(self.contentView).offset(-20);
    make.bottom.mas_equalTo(self.contentView).offset(80);
    
}];

自己封装一个方法, 改变图片的frame, 然后在.h声明出去
- (void)cellOnTableView:(UITableView *)tableView didScrollView:(UIView *)view{

  // 将cell的frame转换成view的Frame(为了获取每个cell的Y值)
  CGRect rect = [tableView convertRect:self.frame toView:view];

  //视图的frame的一半 减去 所看到的每个CellY值(获取滚动的值)
  //以屏幕中心点为0点 获取能看到的每个Cell离中心点得值是多少
  float distanceCenter = CGRectGetHeight(view.frame) / 2 - CGRectGetMinY(rect);

  // 图片高度 - cell的高度 (获取图片超出cell高度部分)图片肯定要比cell大,否则不会有视觉差效果
  float difference = CGRectGetHeight(self.imageViewOfPic.frame) - CGRectGetHeight(self.frame);

   float imageMove = (distanceCenter /  CGRectGetHeight(view.frame)) *difference;

    //旧的图片frame
  CGRect imageRect = self.imageViewOfPic.frame;

   //移动
   imageRect.origin.y = imageMove - (difference / 2);

   //新的图片frame
   self.imageViewOfPic.frame = imageRect;

}

在vc中两个tableView的协议方法照写, 但是多一个scollView的滚动监听
#pragma mark - 滚动监听
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    //获取表视图的可见单元格(可见的视图)
    NSArray *visibleCells = [self.tableView visibleCells];

    for (NAMinePicTableViewCell *cell in visibleCells) {
    
        //可见视图设置->背景图片y值
        [cell cellOnTableView:self.tableView didScrollView:self.view];
    
    }

}

感谢http://www.jianshu.com/p/2826bffb517e 的分享, 我是用纯代码写的, 都一样

你可能感兴趣的:(实现tableView双滚动)