2주차 2️⃣

[복습을 위한 질문]

  • 생명주기(Lifecycle) 이란 무엇인가?
    -> App이 실행되고 종료되면서까지 특정 state를 거치는 싸이클..?

  • 옵셔널을 다룰때 주의해야 할것
    -> 웬만하면 강제 언래핑을 사용하지 말것. 만에하나라도 강제 언래핑해버린 변수나 프로퍼티에 nil 값이 들어있으면 바로 crush남.. 굉장히 치명적..

과제

  • 생명주기를 활용한 앱 클론 프로그래밍

과정

우선 무슨 App을 만들지부터 꽤 오래 고민했다. 😓

너무 간단한거는 큰 도움(?)이 안될것같고 그렇다고 너무 복잡한 구성의 App은 하다가 말것같아서 여러 앱들의 UI와 기능들을 비교해가며 선택했다.

결국 카카오뱅크 어플을 만들어보기로 했고, 기능은 여러 컴포넌트와 VC끼리의 데이터전송을 이용한 계좌송금정도..? 라고 생각했다.

우선 완성된 App 내 화면이다.

본연의 카카오뱅크 어플과 100퍼센트 똑같지는 않겠지만 최대한 비슷하게 해보려고 했다.

사용한 주요 컴포넌트

  • Tab Bar Controller / Navigation item
  • Container View
  • Segmented Control
  • Page Control
  • Scroll View
  • Stack View
  • Label / Button / Image View / Text Field

구현한 기능

  • 처음 App에 들어갔을 때 팝업성 광고 화면 띄우기
    -> 처음 실행하는 화면인지 알려주는 함수(Boolean값 이용)를 만들어서 viewDidAppear() 에서 실행시켜줬기 때문에, 맨 처음 들어갔을 때만 팝업성 광고화면이 뜨고 다른 View에서 되돌아오거나 전환될때는 광고화면이 뜨지 않음.
  • Segmented control 바 커스텀
    -> 현재 선택되지 않은 Segmented control 바의 인덱스 background를 투명하게 하고싶었는데, 스토리보드에서는 할 수 없고 직접 코드로 custom 작업을 해야했다.

[참고] https://stackoverflow.com/questions/58105920/how-to-set-backgroundcolor-of-uisegmentedcontrol-to-white-in-ios-13

  • Container View로 segmented conrol로 전환되는 화면 분할해주기
    -> 밑에 화면처럼 Container view 두개와 각각의 VC.swift 파일을 만들어줬음
    -> 이때 alpha값(투명도)을 0아니면 1로 줘서 둘중 하나를 가려주는 형식으로 구현함
  • 메인 VC에 있는 프로퍼티값을 불러와 다른 VC에서 계속 활용
    -> VC를 인스턴스화해서 그 값을 넘겨주고 넘겨줬음 => 굉장히 까다로운 issue 발생(추후 설명)

  • 이체할 금액 입력하는 화면 키보드 구현
    -> 내장된 키보드가 내가 생각했던 Number Pad가 아니여서 Stack View에다가 버튼 하나씩 쌓아서 구현
    -> 번호를 누를때마다 문자열에 추가가되고 다시 그 문자열을 다루는 함수를 만들어 " , " 와 " 원 " 을 추가해줌
    -> 0원일때는 확인부분의 색깔이 회색이지만, 값이 들어가면 노란색으로 바뀜
    -> 0원일때 0 혹은 00 버튼 입력 안됨 => 여기서도 로직의 늪에 빠지는 이슈 발생..(추후 설명)

  • 이체 금액 입력하는 화면에서 Background로 넘어갔다가 다시 들어오면 이체를 계속할꺼냐는 팝업창 구현
    -> Observer랑 notificationcenter 만들어서 처리
    -> 종료누르면 맨 처음 화면으로 돌아가고 계속합니다 버튼 누르면 그대로 이어서 진행할 수 있음

  • UserDefault 사용
    -> 도저히 여러 스택으로 쌓이는 뷰들간의 데이터를 처리하기가 복잡해서 마지막부분은 UserDefault값 사용해서 처리해줌
    -> 신세계긴했음 ㅎㅎ

  • Page Control 구현
    -> 이미지 폴더 만들어서 프로젝트에 추가해주고 두번째 Tab 화면에서 구현

  • App이 Background로 넘어갔을 때 Blur처리
    -> ScenceDelegate 파일에서 처리해줌
    -> sceneWillResignActive() 에서 화면에 blur를 전체적으로 입혀주고 sceneDidBecomeActive() 에서 다시 blur를 벗겨줌으로서 foreground에 화면이 다시 등장했을 때 정상적인 화면이 보인다

중간중간에 있었던 issue

  • 가장 메인 이슈

VC에서 VC로 데이터를 넘겨주는 방식에 있어서.. 큰 이슈가 있었다.

한다리 걸쳐져 있는 VC에서 VC로 데이터를 옮기는건 인스턴스화방식을 이용해서 넘기면 되지만 메인화면에서 한 4개의 다리가 걸쳐져있는 VC까지 데이터를 주고 받을때가 문제였다..

특히 하위뷰에서 상위뷰로 데이터를 옮겨야할때에는 인스턴스화를 이용한 방식에 큰 불편함을 느꼈다..

찾아보니 하위뷰에서 상위뷰로 데이터를 전송할때는 보통 Delegate방식을 많이 이용한다고 하는데 이미 어느정도 로직이 세워진 단계에서 다시 이걸 갈아엎고 Delegate를 사용하기에는 무리가 있었다..

그래서 찾아낸게 바로 UserDefault다.

UserDefault를 사용하면 앱의 어느 곳에서나 데이터를 쉽게 읽고 저장할 수 있기 때문에 계좌의 금액같은 간단한 정보를 저장하는데에는 적합할것 같았다.(물론 아직 정확히 어디에 써야하는지는 잘 모름..)

아무튼 UserDefault를 사용해서 임시방편의 길은 찾았지만 Delegate를 이용한 데이터 전송방식을 얼른 공부해야겠다는 생각이 들었다

  • strechy header

카카오뱅크의 대부분의 해더는 strechy header로 되어있다.

strechy header란 아래처럼 스크롤을 했을 때 그 화면의 header가 자연스럽게 크기가 조정되는 형태의 header를 말한다

어떻게든 해보려고 했지만.. 많은 시간을 들이다가 실패했다..

확실히 세련된 느낌이 나는 header이기에 언젠가는 꼭 구현해보고 싶다

  • 로직의 늪 + 시간배분의 문제

얼마전까지만해도 알고리즘 공부를 했어서 그런가 자꾸 어떻게든 예외처리를 하나라도 더하려고 하는 모습때문에 시간이 너무 많이 낭비되는 내 모습을 발견..

특히 이번에 계산기를 만들때 계속해서 추가되는 로직때문에 시간을 많이 잡아먹혔다..

물론 예외처리를 빈틈없이 해야하는건 맞지만 이번 주차 과제의 본질에 맞는 방향으로 했어야했는데.. 그래서 앞으로는 시간 배분을 좀 더 잘해야겠다는 생각을 했다.

아쉬웠던 점

  • Navigation controller를 못썼음..

  • Tab bar controller가 아직 정확히 뭔지 100프로 모르겠음. 뭔가 일반 VC이랑 살짝 결이 다른 느낌..

  • 계산기 페이지에 이것저것 기능(현재 금액보다 더 많은 금액을 이체하려고 할 시 alert 표시 등)을 추가 못한점..

  • 두번째 tab의 Page control가 일정 시간마다 자동으로 넘어가게끔 하고싶었는데 시간이 부족..

  • 뭔가 optional 처리 혹은 오토 레이아웃 처리가 그리 철저하지 않았던것 같다..

이번주 과제를 하면서 느낀점

  1. 그래도 기능 구현보다 UI 만드는게 낫구나..

  2. 계획을 어느정도라도 좀 세워서 시간 배분을 조금이라도 해야겠다는 생각을 했다. 그냥 오늘 하는데까지 해야지라고 생각하고 하니까 막판에 좀 힘들었음.

  3. 다음부터는 중간중간에 개발일지를 써야겠다.. 한번에 몰아서 쓰려니까 기억도 조금 희미하고 뚜렷하지가 않아서 한 100마디 쓸거를 50마디밖에 못쓰는 느낌

  4. 저번주보다 그래도 나아진것 같아서 뿌듯하긴 하다! 😁

전체코드: https://github.com/shintaewon/RC_week_2

참고 출처 -
https://velog.io/@sossont/iOS-%EC%96%B4%ED%94%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0-%ED%8C%9D%EC%97%85%EC%B0%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0
https://hyesunzzang.tistory.com/234
https://zeddios.tistory.com/107

profile
일단 배우는거만 정리해보자 차근차근,,

0개의 댓글