2016-12-24 3 views
-1

Ich zeichne Timeline-Ansicht. Ich benutze UITableView, wenn ich die neuen Daten die Kreisschicht am unteren Rand der vorherigen Ebene aktualisiert.Überlappende Ebenen beim Laden neuer Daten in UITableView

Dies ist, wie es aussieht, wenn neue Daten

Laden ist

overlapping layers when new data populating

Hier meine benutzerdefinierte Zelle Code:

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") 
     } 
    } 

Wie ich dieses Problem

+0

Set Rahmen von CAShapeLayer –

+0

Rahmen ist nicht ein Problem. Dies geschieht, wenn sich die Daten laden und die Zellenhöhe ändert. So ändert sich die Position des Ankers. Wie kann ich zuvor gezeichnete Layer entfernen? –

+0

können Sie removefromsuperview dafür verwenden. Bevor Sie die Antwort festlegen, entfernen Sie Ihre Ebene oder versuchen Sie viewToClear.layerunterseiten = nil; –

Antwort

0
itemImageView.layer.cornerRadius = 25; 

lösen könnte Aktualisieren Sie: Als Benutzer atulkhatri weist darauf hin, es wird nicht funktionieren, wenn Sie nicht hinzufügen:

itemImageView.layer.masksToBounds = YES; 
+0

funktioniert nicht ... –

0

Rufen Sie Ihre Bildansicht in dieser Erweiterung

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) 
     } 
    } 
+0

funktioniert nicht ... –

Verwandte Themen