iOS 탭보기 컨트롤러 용 Google지도 인스턴스를 하나만 사용하려면 어떻게해야하나요?iOS 용 Google지도 탭보기 컨트롤러 인스턴스를 하나만 유지하는 방법
탭보기 컨트롤러 내에서 다른 탭이 있고 일부는 Google Maps iOS SDK를 사용합니다. 메모리상의 이유로 mapView의 인스턴스 하나만 유지하려고합니다.
나는 내 이전 프로젝트에서 유사한 문제를했을 스위프트 4.
iOS 탭보기 컨트롤러 용 Google지도 인스턴스를 하나만 사용하려면 어떻게해야하나요?iOS 용 Google지도 탭보기 컨트롤러 인스턴스를 하나만 유지하는 방법
탭보기 컨트롤러 내에서 다른 탭이 있고 일부는 Google Maps iOS SDK를 사용합니다. 메모리상의 이유로 mapView의 인스턴스 하나만 유지하려고합니다.
나는 내 이전 프로젝트에서 유사한 문제를했을 스위프트 4.
에 내 코드를 쓰고 있어요. 지도 화면과 상세지도 화면이 있습니다. 두 화면 모두에 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
}
어떻게 mapView를 다른 탭으로 전달 했습니까? –
샘플 코드로 코드를 편집했습니다. 더 이상의 질문이 있으면 주저하지 말고 물어보십시오 :) –