2017-10-23 4 views

Antwort

0

Ich habe in meinen früheren Projekten ähnliches Problem gemacht. Ich hatte einen Kartenbildschirm und einen detaillierten Kartenbildschirm. Ich habe GMSMapView für beide Bildschirme wiederverwendet. Der Common Manager filterte die Daten der Karte beim Betreten/Verlassen des ViewControllers. So können Sie die Auswahl neuer Tabs in Ihrem TabViewController erkennen und Ihre Änderungen auf Ihr mapView anwenden. Dies erleichtert das Laden Ihres Speichers, besonders wenn Sie viele Notationen mit Ihrem mapView verwenden.

Bearbeiten mit Beispielcode-Schnipsel:

Hier ist ein Beispiel-Code-Snippet

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     if self.mapView?.superview != self.mapViewContainer { 
      self.mapView?.placeFullScreenInView(self.mapViewContainer) 

      ... // some VC logic handling appearance of the mapView and business logic here 
     } 
}` 

Weitere Informationen: Aufrufe:

@IBOutlet private weak var mapViewContainer: UIView! // UIView - container of the GMSMapView 
weak var mapView: GMSMapView! // the shared GMSMapView between the controllers; In my case I passed this view in prepareForSegue because it was the easier way: VC -> (push) Detailed VC. You might need separate class managing this transfer. 

Benutzerdefinierte Methoden

placeFullScreenInView - pretty self explanatory - placing the mapView as a subview with 4 constraints to the top, right, bot, left (0) in mapViewContainer. 

In meiner Basis zuerst VC habe ich auch die gleiche Logik von mapView/mapViewContainer und:

override func viewWillDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 

     self.map?.removeFromSuperview() 
     //... logic for nullifying not needed data 
    } 
+0

Wie hast du deine mapView zu Ihren verschiedenen Tabs? –

+0

Ich habe meinen Code mit einem Beispielcode bearbeitet. Wenn Sie weitere Fragen haben, zögern Sie bitte nicht zu fragen :) –

Verwandte Themen