在UITableView中加载新数据时重叠图层

时间:2016-12-24 08:06:07

标签: ios swift uitableview tableviewcell custom-view

我正在绘制时间轴视图。当我更新新数据时,在前一层底部绘制的圆形图层时,我正在使用UITableView

这是加载新数据时的样子

overlapping layers when new data populating

这是我的自定义单元代码:

  override func draw(_ rect: CGRect) {
      if let anchor =  anchorView() {
          anchor.layer.zPosition = 3
          let iconImageView = anchor as! UIImageView
          iconImageView.image = iconImageView.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
          iconImageView.tintColor = UIColor.white

          let centreRelativeToTableView = anchor.superview!.convert(anchor.center, to: self)
          // print("Anchor x origin : \(anchor.frame.size.origin.x)")
          timelinePoint.position = CGPoint(x: centreRelativeToTableView.x , y: centreRelativeToTableView.y/2)
          timeline.start = CGPoint(x: centreRelativeToTableView.x  , y: 0)
          timeline.middle = CGPoint(x: timeline.start.x, y: anchor.frame.origin.y)
          timeline.end = CGPoint(x: timeline.start.x, y: self.bounds.size.height)
          timeline.draw(view: self.contentView)

          let circlePath = UIBezierPath(arcCenter: CGPoint(x: anchor.center.x,y: anchor.center.y ), radius: CGFloat(20), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)

          let shapeLayer = CAShapeLayer()
          shapeLayer.path = circlePath.cgPath

          //change the fill color
          shapeLayer.fillColor = UIColor.randomFlat.cgColor
          // shapeLayer.fillColor = UIColor.clear.cgColor

          //you can change the stroke color
          shapeLayer.strokeColor = UIColor.white.cgColor
          //you can change the line width
          shapeLayer.lineWidth = 0
          anchor.alpha = 1
          //Set Anchor Z position
          anchor.layer.zPosition = 2
          shapeLayer.zPosition = 1

          anchor.superview?.layer.insertSublayer(shapeLayer, at: 0   )
          //  anchor.tintColor = UIColor.white

          // Setting icon to layer
          /* let imageLayer = CALayer()
          imageLayer.contents = iconImageView.image
          imageLayer.frame = anchor.frame
          anchor.layer.addSublayer(imageLayer)*/
          // timelinePoint.draw(view: self.contentView)
          } else {
                print("this should not happen")
      }
  }

我怎么能解决这个问题

2 个答案:

答案 0 :(得分:0)

itemImageView.layer.cornerRadius = 25;

更新:正如用户atulkhatri所指出的那样,如果您不添加,它就无法工作:

itemImageView.layer.masksToBounds = YES;

答案 1 :(得分:0)

在此附加信息中调用您的图片视图

    extension UIImageView {
        public func maskCircle(anyImage: UIImage){
        self.contentMode = UIViewContentMode.ScaleAspectFill
        self.layer.cornerRadius = self.frame.height / 2
        self.layer.masksToBounds = false
        self.clipsToBounds = true
        //make square(* must to make circle), resize(reduce the kilobyte) & fix rotation. 
        self.image = prepareImage(anyImage)
        }
    }