2016-12-24 10 views
-1

Я рисую вид временной шкалы. Я использую UITableView, когда я обновляю новые данные круговым слоем, нарисованным снизу предыдущего слоя.Перекрытие слоев при загрузке новых данных в 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") 
     } 
    } 

Как я мог бы решить эту проблему

+0

набор кадров из CAShapeLayer –

+0

кадров не является проблемой. Это происходит при изменении данных и изменении высоты ячейки. Таким образом, положение якорных изменений. Итак, как я могу удалить ранее нарисованный слой? –

+0

вы можете использовать removefromsuperview для него. Прежде чем вы установите ответ, удалите свой слой или попробуйте viewToClear.layer.sublayers = nil; –

ответ

0
itemImageView.layer.cornerRadius = 25; 

Обновление: Как пользователь atulkhatri указывает, что не будет работать, если вы не добавить:

itemImageView.layer.masksToBounds = YES; 
+0

не работает ... –

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

не работает ... –

 Смежные вопросы

  • Нет связанных вопросов^_^