2016-11-07 54 views
1

我有一張疼痛圖,我使用位置座標來繪製出現疼痛的位置。我可以在for循環中添加「點」,並且它們顯示正常。不過,在我將它們在for循環外部實例化之前,我無法刪除它們。所以每次我更新視圖時,它都會繪製新視圖,而不是舊視圖。我能做什麼?如何刪除特定類型的所有子視圖

該版本增加點很好,但我不能叫dot.removeFromSuperview我不能外面將其刪除()

DispatchQueue.global(qos: .background).async { 
     if let locationNotNilX = self.painDiagramAnalysisModel.painLocationXFor(days: self.daysChosen){ 
     x = locationNotNilX 
     count = locationNotNilX.count 
     } 

     if let locationNotNilY = self.painDiagramAnalysisModel.painLocationYFor(days: self.daysChosen){ 
     y = locationNotNilY 
     } 

     let locationsArray = zip(x, y) 
     print("zipped array \(locationsArray)") 
     DispatchQueue.main.async { 
     let dot = UIImageView() 
     dot.removeFromSuperview() 
     dot.image = nil 
     for item in locationsArray { 
      self.locationPainY = (diagramHeight * CGFloat(item.1)) + originY 
      self.locationPainX = (diagramWidth * CGFloat(item.0)) + originX 
      print(" locationX \(self.locationPainX) locationY \(self.locationPainY)") 
      dot.image = UIImage(named: "dot") 
      dot.frame = CGRect(x: self.locationPainX - (dotDiameter/4), y: self.locationPainY - (dotDiameter/4), width: dotDiameter , height: dotDiameter) 

      if count > 2 { 
      dot.alpha = 0.6 
      } else { 
     dot.alpha = 1.0 
      } 
      dot.readingsPressedAnimation() 

      self.view.addSubview(dot) 
     } 
     } 
    } 

這個版本中刪除點,但只有一個點(自掛到網點,只是對其進行實例在一次循環中。

let dot = UIImageView() 
    dot.removeFromSuperview() 
    dot.image = nil 

    DispatchQueue.global(qos: .background).async { 
     if let locationNotNilX = self.painDiagramAnalysisModel.painLocationXFor(days: self.daysChosen){ 
     x = locationNotNilX 
     count = locationNotNilX.count 
     } 

     if let locationNotNilY = self.painDiagramAnalysisModel.painLocationYFor(days: self.daysChosen){ 
     y = locationNotNilY 
     } 

     let locationsArray = zip(x, y) 
     print("zipped array \(locationsArray)") 
     DispatchQueue.main.async { 

     for item in locationsArray { 
      self.locationPainY = (diagramHeight * CGFloat(item.1)) + originY 
      self.locationPainX = (diagramWidth * CGFloat(item.0)) + originX 
      print(" locationX \(self.locationPainX) locationY \(self.locationPainY)") 
      dot.image = UIImage(named: "dot") 
      dot.frame = CGRect(x: self.locationPainX - (dotDiameter/4), y: self.locationPainY - (dotDiameter/4), width: dotDiameter , height: dotDiameter) 

      if count > 2 { 
      dot.alpha = 0.6 
      } else { 
      dot.alpha = 1.0 
      } 
      dot.readingsPressedAnimation() 

      self.view.addSubview(dot) 
     } 
     } 
    } 

如何添加點的多個實例,並刪除它們外循環?

回答

6

遍歷您的地圖子視圖並刪除所有UIImageViews

func removeDots() { 
    for case let dot as UIImageView in yourPainMapView.subViews { 
     dot.removeFromSuperView() 
    } 
} 

如果你正在使用你不想刪除其他UIImageView子視圖,子類UIImageViewclass MyDot:UIImage {...}):

for case let dot as MyDot in yourPainMapView.subViews 
+0

我會嘗試今晚。那麼可以讓一個按鈕在別的地方被按下時調用點嗎? – SashaZ

+0

當然。添加'removeDots'as動作到你的按鈕。 – shallowThought

相關問題