[Day 44] iOS 뷰가 보이지 않는 문제 해결
iOS 킥보드 앱 개발 중 UIView가 보이지 않는 문제를 디버깅하고, 애니메이션 문제를 해결한 과정에 대한 TIL.
😭 너 왜 안보이니…
오늘은 SSEANG
킥보드 대여 앱 프로젝트에서 UI가 보이지 않는 문제가 있었다. 분명 뷰는 제대로 그려져 있었고? 애니메이션을 적용을 한 뒤로 뷰가 보이지 않는 문제가 발생하였다… 어디서 문제였을까…
🚨 문제현상
원하던 효과는, 마커를 클릭 시 킥보드 정보 뷰가 아래에서 올라오면서 마커 쪽으로 카메라가 이동되는 애니메이션이 였다. 하지만? 카메라가 마커쪽으로 이동은 됐는데 뷰가 올라오지 않았다…
🐞 디버깅 과정
일단 마커에 정보가 안넘어가나? 했지만 잘 넘어갔다..
그러다가 문뜩 든 생각 나의 콘솔로그를 보았다 콘솔 로그에는 메서드를 호출했을때 확실하게 눈을 보기 위해 print문을 찍어놓았는데 그게 눈에 보였다.
⁉️ 문제의 원인
킥보드 정보창을 띄웠을때 킥보드 정보창을 내릴때 어떻게 해야할까 고민을 하다가 사용자가 화면을 누르거나 스크롤 했을때 자동으로 내려가게끔 설정을 해놨었다.
처음에 마커쪽으로 카메라를 이동했을때는 잘 됐는데… 카메라 이동 애니메이션을 넣으니 그 이동애니메이션이 카메라 이동이 됐다고 delegate에서 인식해서 킥보드 정보뷰가 안올라왔던것…. 나는 개똥벌레..
해결책
애타게 팀원들과 이야기를 하면서 나온 해결책은 두가지가 있었다. 두 방법다 비슷한 방법이긴 하다!
- 카메라 이동하는 것과 킥보드 정보뷰를 띄워주는 메서드를 분리하고, 킥보드 호출 메서드를 딜레이 시키기
1
2
3
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
showKickBoardInfoVIew()
}
- 카메라 이동하는 것과 킥보드 정보뷰를 띄워주는 메서드를 분리하고, delegate로 카메라의 움직임이 감지해서 끝난 뒤에 킥보드 정보뷰를 호출하기
1 2 3
func mapViewCameraIdel(_: NMFMMapView) { showKickBoardView() }
이렇게 두가지의 해결 방안이 나왔는데 두가지다 적용해보니 해결이 됐는데 채택한 방법은?!
2번 카메라이동을 감지해서 카메라가 정지 됐을 때 킥보드 정보뷰 띄워주기로 했다.
두가지 방법의 차이는 메서드 호출을 늦추는건 똑같지만. 애니메이션이 언제 끝나는지는 확실하게 알 수가 없다.
1
animate(withDuration: 0.3)
이렇게 주어도 0.3초 뒤에 끝난다는 확신을 할 수가 없는 상황이고, 넉넉하게 0.5초를 주게 되면 딜레이가 발생되어 스크롤이 감지 돼서 정보창이 올라오지 않는 버그가 생길 수 있기 때문에 delegate
로 확실하게 이동이 끝났을때 호출을 하는게 좋다고 생각이 들어 2번 방법으로 문제를 해결하였다!!
맺으며: 춘식이와 함께하는 스마트한 개발
이번 프로젝트는 MapView를 사용하는 킥보드 대여앱이다. 확실히 많이 어렵긴 하지만 이렇게 팀원들과 같이 오류에 대해 생각하고 해결해 나아가면서 어떤부분에서 에러가 났을까 하는 문제를 바라보는 시선이 바뀌고, 배워 가면서 하니 금방 할 수 있었다!
더 열심히 노력 해서 좋은 iOS Developer가 되자!
혹시 이 글을 보시는 분들 중 더 유용한 팁이 있다면 댓글로 많이 알려주세요!