CAShapeLayer在tableview reloadData中发生了变化

时间:2017-04-27 18:44:27

标签: ios uitableview cashapelayer

我有一个自定义单元格的表格视图,在其视图中,我添加了形状。它在第一次正确显示形状,但在reloadData形状改变后并没有正确显示。为什么会这样? (使用reloadData行的顺序更改)

let cPath = UIBezierPath()
    cPath.move(to: centre)
    cPath.addArc(withCenter: centre, radius: radius, startAngle: startAngle, endAngle: arc + startAngle, clockwise: true)

    // circle shape
    let circleShape = CAShapeLayer()
    circleShape.path = cPath.cgPath
    circleShape.strokeColor = UIColor.black.cgColor
    circleShape.fillColor = UIColor.black.cgColor

    // add sublayer
    cell.pasokhView.layer.addSublayer(circleShape)

1 个答案:

答案 0 :(得分:0)

有很多方法可以防止多次添加形状图层(假设这是问题)。

  • 最简单的方法是在添加形状之前检查您的视图图层是否已有子图层(通过其sublayers属性)。

  • 您也可以在添加新子图层之前删除所有子图层。

  • 另一种选择是在添加图层时将bool标志属性设置为true,在添加图层之前,请始终检查此标记是否为false。

我不知道任何只对表格视图单元格运行一次的方法(当重复使用单元格时,awakeFromNib肯定会被多次调用)