2017-10-23 6 views
0

iOS 탭보기 컨트롤러 용 Google지도 인스턴스를 하나만 사용하려면 어떻게해야하나요?iOS 용 Google지도 탭보기 컨트롤러 인스턴스를 하나만 유지하는 방법

탭보기 컨트롤러 내에서 다른 탭이 있고 일부는 Google Maps iOS SDK를 사용합니다. 메모리상의 이유로 mapView의 인스턴스 하나만 유지하려고합니다.

나는 내 이전 프로젝트에서 유사한 문제를했을 스위프트 4.

답변

0

에 내 코드를 쓰고 있어요. 지도 화면과 상세지도 화면이 있습니다. 두 화면 모두에 GMSMapView을 재사용했습니다. 공통 관리자가 ViewController를 시작/종료 할 때지도의 데이터를 필터링했습니다. 따라서 TabViewController에서 새 탭을 선택하고 해당 변경 사항을 mapView에 적용 할 수 있습니다. 이렇게하면 특히 mapView에서 많은 표기법을 사용하는 경우 메모리로드가 쉬워집니다. 샘플 코드와

편집 : 여기

은 샘플 코드를입니다

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 
     } 
}` 

상세 정보 : 조회수 :

@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. 

사용자 정의 메소드

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

내 기본 VC에서 나는 mapView/mapViewContainer의 동일한 로직을 가지고 있습니다 :

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

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

어떻게 mapView를 다른 탭으로 전달 했습니까? –

+0

샘플 코드로 코드를 편집했습니다. 더 이상의 질문이 있으면 주저하지 말고 물어보십시오 :) –

관련 문제