2016-11-07 2 views
1

У меня есть карта боли, где я использую координаты местоположения, чтобы построить участок, где была боль. Я могу добавить «точки» в цикл for, и они отображаются хорошо. Однако я не могу удалить их, прежде чем создавать их вне цикла for in. Поэтому каждый раз, когда я обновляю представление, он будет строить новые, а не одни поверх старых. Что я могу сделать?Как удалить все подъязыки определенного типа

Эта версия добавляет точки хорошо, но я не могу удалить их снаружи, как я не могу назвать 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 подвиды вы не хотите, чтобы удалить, подкласс UIImageView (class MyDot:UIImage {...}):

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

Я попытаюсь это сегодня. Может ли для случая, если точка будет вызываться, когда кнопка нажата в другом месте? – SashaZ

+0

уверен. добавьте действие 'removeDots'а к вашей кнопке. – shallowThought

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