Swift 自定义UITableViewCell以及Cell的底图跟着滑动也滑动。

前端之家收集整理的这篇文章主要介绍了Swift 自定义UITableViewCell以及Cell的底图跟着滑动也滑动。前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

找工作依然不好找,还需努力才是
还是按着OC的惯性思维看过来
首先得有个tableview,然后就是实现其的代理方法语法都好说的,就看
这个里面就是咱们定义cell时所写的代码,里面也用到复用。

func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let initIdentifier = "Cell"
      //这行代码是复用,我也试着将这个cell强行:LinmoTableViewCell,可是就报错了,说是有了自定义的类型,就不让我为空了,但是默认就ok,难道我自定义里面得有默认初始的方法?这里很是疑惑,希望有知道的大神给我讲讲。
        var cell = tableView.dequeueReusableCell(withIdentifier: initIdentifier)
        if (cell == nil){
        //如果为空了,我们就得给它初始化,但这里初始化之后,由于cell的类型不清楚,所以无法应用我们自定义类里的方法。
             cell =  LinmoTableViewCell(style: UITableViewCellStyle.default,reuseIdentifier: initIdentifier)
        }
        return cell!;
    }

就这样,为了用自定义cell里面的方法,我写在了display里面

func tableView(_ tableView: UITableView,willDisplay cell: UITableViewCell,forRowAt indexPath: IndexPath) {
  //这里应该是tableview显示在屏幕上的cell会触发的事件,通过indexPath我们不难找到指定的cell,这里强行as! 然后就可以用咱们自定义里面的方法了,回调也可以了
        let mycell = cell as! LinmoTableViewCell
        mycell.setData(dic: (dataArr?[indexPath.row])!)
    }

好,前面就是一般的创建cell的方法,下面这个就是别人写的炫酷的代码http://www.tuicool.com/articles/mmEjYj6
这段代码要写在,自定义cell中

- (CGFloat)cellOffset
{
    /* - (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view; 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect 这里用来获取self在window上的位置 */
    CGRect toWindow = [self convertRect:self.bounds toView:self.window];

    //获取父视图的中心
    CGPoint windowCenter = self.superview.center;

    //cell在y轴上的位移 CGRectGetMidY之前讲过,获取中心Y值
    CGFloat cellOffsetY = CGRectGetMidY(toWindow) - windowCenter.y;

    //位移比例
    CGFloat offsetDig = 2 * cellOffsetY / self.superview.frame.size.height ;

    //要补偿的位移
    CGFloat offset =  -offsetDig * cellHeight/2;

    //让pictureViewY轴方向位移offset
    CGAffineTransform transY = CGAffineTransformMakeTranslation(0,offset);
    self.pictureView.transform = transY;

    return offset;
}

里面两点
1. 算出偏移量
2. 让图片去走偏移量(transform)
就酱。
还没完呢
这个方法在哪里触发呢?就是滑动时候触发

func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let array:Array<LinmoTableViewCell> = tableview?.visibleCells as! Array<LinmoTableViewCell>
        for ( _,object ) in array.enumerated() {
           object.cellOffset()
        }
    }

猜你在找的Swift相关文章