안녕하세요. 개발하는 정주입니다.
오늘은 작심삼일 개발 일지 - 2에 대해 포스팅하려고 합니다.
https://github.com/jeongju9216/ThreeDayHump
* 해당 포스팅은 대략적인 개발 일지로 자세한 내용은 필요시에만 따로 포스팅합니다.
목차
목표
오늘의 첫 번째 목표는 작심삼일 버튼을 눌렀을 때 Day Count 뷰를 칠하는 것입니다.
두 번째 목표는 작심삼일을 성공할 때마다 Alert를 띄워주고 그만할지 계속할지 선택할 수 있도록 하는 것입니다.
두 가지 목표를 진행하는데 한 번에 성공한 게 없네요.
인생 참 마음대로 안 되는 것 같습니다.
Day Count View 칠하기
Day Count 뷰는 위 사진의 사각형 뷰를 의미합니다.
하루에 한 번 "오늘도 해냈다" 버튼을 누르면 흰색으로 색이 칠해져야 합니다.
다크 모드 대응 문제
해당 기능을 작업하며 헤맸던 부분은 다크 모드 대응이었습니다.
현재는 Day Count에 따라 흰색 혹은 배경색으로 뷰를 칠하고 있는데요.
백그라운드에서 다크 모드를 변경하고 포그라운드로 변하면 캐치하지 못해 이전 배경색이 그대로 남아 있는 문제가 있었습니다.
Life Cycle도 다시 살펴보고 이리저리 시도해보며 두 가지 해결 방법을 떠올렸는데요.
- View의 색을 투명하게 한다.
- Notification을 이용해 포그라운드로 올라올 때 View의 색을 변경한다.
1번과 2번 방법은 오늘 순차적으로 진행해보려고 합니다.
1번으로 해결이 되면 굳이 포그라운드로 캐치를 하지 않아도 될 것 같습니다.
Alert 띄워 주기
작심삼일을 성공하면 Alert를 이용해 성공했다는 축하 메시지를 전달하였습니다.
동시에 같은 목표로 다시 작심삼일을 도전할지, 그만할지 선택할 수 있도록 구현했습니다.
Alert를 띄우는 건 다양한 예시를 참고하며 작업했는데요.
해당 기능을 구현하면서 Alert가 띄워져 있을 때 앱을 강제 종료하면 어떻게 처리하면 좋을지 고민이 많았습니다.
결론은 Alert를 다시 띄워주기로 했습니다.
Alert 생성 문제
그래서 싱글톤 객체에 알람을 띄울지 말지 결정하는 변수도 하나 만들어서 View Controller에 진입할 때 Alert를 띄워주도록 작업했습니다.
이 과정에서 viewDidLoad()에서는 Alert를 띄우는 작업을 하면 안 된다는 것을 배웠습니다.
viewDidLoad()에서 Alert를 띄워주니 "whose view is not in the window hierarchy!"라는 경고가 났습니다.
Alert의 첫 번째 View Controller가 생성되기 전에 추가를 하려고 해서 발생하는 에러였습니다.
따라서 첫 번째 View Controller가 생성된 후 호출되는 viewDidAppear()에서 처리하는 것으로 해결하였습니다.
기획 고민
기획에서도 한 가지 고민이 생겼는데요.
"그만하기"와 "계속하기" 버튼의 순서와 색상은 지금도 고민 중입니다.
둘 중 어떤 선택지가 yes이고 no인지 애매하네요.
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.