![[TeamProject] troubleshooting_kakaomap관련](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLDTQg%2FbtsJpKT3kb0%2FlqPxxI4BcdszbKIBZxiJe0%2Fimg.jpg)
맵 제스쳐가 최초진입시에는 제대로 작동하지만
다른 뷰로 이동한 후 다시 돌아왔을때는 작동하지 않는 오류가 있음
override func viewDidLoad() {
super.viewDidLoad()
if let mapContainer = mapContainer {
mapController = KMController(viewContainer: mapContainer)
mapController?.delegate = self
mapController?.prepareEngine()
mapController?.activateEngine()
}
addViews()
addObservers()
createLabelLayer()
createPoiStyle()
createPoi()
}
deinit {
mapController?.pauseEngine()
mapController?.resetEngine()
removeObservers()
print("deinit")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
_appear = true
if mapController?.isEngineActive == false {
mapController?.activateEngine()
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
_appear = false
mapController?.pauseEngine()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
mapController?.resetEngine()
removeObservers()
}
아무래도 뷰컨트롤러 생명주기의 문제가 아닐까 하는 생각이 들어서 수정에 들어감
다른 탭에서 다시 지도뷰로 돌아왔을 때 제스처를 사용할 수 있도록 해야한다! 가 핵심
viewDidAppear
뷰가 화면에 완전히 나타난 직후에 호출됨
화면에 표시된 후 애니메이션을 시작하거나, 다른 작업을 수행하는 데 사용
이 메서드는 뷰가 화면에 나타날 때마다 호출
정리!
# 호출 시점: 뷰가 화면에 완전히 나타난 직후에 호출
이 시점에서는 뷰가 사용자에게 완전히 보이고 상호작용이 가능하게 됨
# 호출 빈도: 뷰가 화면에 다시 나타날 때마다 호출
• 용도: 화면에 뷰가 완전히 표시된 후에 수행할 작업에 적합
예를 들어, 애니메이션을 시작하거나, 데이터 업데이트, 추적 이벤트 등을 처리할 때 사용
출처: https://jjooee-417.tistory.com/entry/UIkit-🎀-1-UIView와-UIViewController [JJOOEE_개발__ :D:티스토리]
viewDidAppear를 사용해 주면 해결 될 것 같다는 생각!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if mapController?.isEngineActive == false {
mapController?.activateEngine()
print("Engine activated in viewDidAppear")
}
mapContainer?.isUserInteractionEnabled = true
}
지도에 나타날 때마다 mapContainer?.isUserInteractionEnabled = true 를 사용해서 제스처를 사용할 수 있도록 함
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
_appear = false
if mapController?.isEngineActive == true {
mapController?.pauseEngine()
}
}
viewWillDisappear도 수정!
수정한 코드에서는 mapController?.isEngineActive == true 조건을 추가하여 엔진이 활성 상태일 때만 일시 중지하도록 변경
엔진이 이미 비활성화 되어있는 경우에는 엔진을 멈추는 작업을 따로 하지 않도록 추가해줌
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if _appear == false {
mapController?.resetEngine()
}
removeObservers()
}
viewDidDisappear도 수정...ㅎ
불필요한 엔진 초기화를 방지하여 성능을 최적화
'Project > Team Project' 카테고리의 다른 글
[TeamProject] Troubleshooting_POI show/hide (0) | 2024.09.09 |
---|---|
[TeamProject] CodeBase 카카오맵 _ 기초부터 차근차근 (1) | 2024.09.06 |
on / off 토글 버튼 만들기 (0) | 2024.08.28 |
[ TeamProject ] 프로젝트 준비 _ 카카오맵 api 공부하기! (8) | 2024.08.25 |
[TeamProject] 프로젝트 기획 _ 1일차 (0) | 2024.08.23 |
iOS Junior Developer를 위해 공부 또 공부
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!