기획 의도 내 취미는 양서류, 절지류, 파충류 같은 희귀 애완동물을 키우는 것이다. 요즘은 취업 준비 때문에 대부분 분양 보냈지만... 아무튼 이런 취미를 가졌기에 희귀 애완동물 커뮤니티에 자주 들어가는데 보통 한두 마리를 키우는 게 아닌 몇십 ~ 수백 마리 단위로 키우는 사람들도 자주 보이고, 자신의 개체 관리 기록 (먹이 급여나 탈피 같은 기록할 사항)을 메모장에다가 기록해 두는 사람들도 종종 보았다. 그래서 이런 희귀 애완동물을 관리한 기록을 저장할 수 있는 앱이 있으면 좋겠다고 생각했고, 희귀애완동물을 관리하는 것을 목적으로 앱을 기획했다. 앱 디자인 일단 우리나라에서 희귀동물하면 보통 파충류, 양서류, 절지류로 나눠지고 가장 많이 키워진다. 그래서 펫 리스트 화면에서 이 3가지의 종을 필터링해서..
객체지향 생활체조에서 원시값을 모두 감싸라는 규칙에 관해 어떤 식으로 구현해야 할지 고민하고 있을 때 nameSpace에 관해 알아보라는 조언을 받았다. namespace란? namespace를 구글링해보면 C++의 NameSpace가 가장 많이 나온다. C++의 namespace의 개념을 간단하게 말하면 같은 것 끼리 모은 공간을 만들고, 모은 공간이 다르면 다른 것으로 치는 것이라고 생각하면 될 듯하다. 네트워크의 NAT의 개념과 비슷하게 생각하면 될 듯? swift에서는 상수를 감싸서 상수 대신 감싼 변수명을 입력하는 식으로 사용한다. 왜 사용하는가? iOS로 프로젝트를 진행하면 무수히 많은 상수를 사용합니다. 오토레이아웃을 잡을때, 애니메이션을 사용할 때, UserDefaults를 사용할 때 등등..
최근 몇주는 부트캠프 준비때문에 알고리즘을 빡세게 준비하느라 프로젝트나 CS 공부를 거의 못했지만.. 이젠 끝났으니 다시 시작. 요즘에는 기존 프로젝트를 리팩토링 하는 작업을 하고 있다. 만드는것보다 리팩토링 하는게 더 어렵다. 이번에는 객체지향 생활체조 원칙중 하나인 "모든 원시 값과 문자열을 포장합니다."를 준수해서 리팩토링 해보았다. 우선 리팩토링한 부분에 대해 설명하자면 아래와 같다. 첫번째 사진의 목표거리와 목표 시간의 숫자부분을 터치해서 설정화면으로 이동해서 거리와 시간을 설정하고 우측 상단의 설정버튼을 누르면 설정한 거리가 적용되도록 만들었던 기능이다. 리팩토링 전 목표 설정 로직은 다음과 같다. ViewModel에서 현재 목표 값을 목표 설정 화면을 생성할 때 할당한다. 이때 시간은 초단위..
우선 앱 시작 시퀸스는 다음과 같다. 1. Xcode에서 제공하는 main 함수를 시스템이 호출 2. main함수는 UIApplication과 app delegate를 생성하는 함수 UIApplicationMain()을 호출 3. UIKit은 Info.plist 혹은 Xcode의 타겟에서 지정한 기본 스토리보드를 로드함. 만약 스토리보드를 사용하지 않을 시 이 단계를 건너 뜀. 4. UIKit이 app delegate에서 application(_: willFinishLaunchingWithOptions:)를 호출 5. UIKit이 UI restoration process을 수행함. application(_:shouldRestoreApplicationState:)의 값이 true경우 수행하고, false일..
프로젝트를 진행하던 도중, 아래와 같은 화면을 만들어야 했다. UILabel과 언더라인 뷰를 하나의 스택뷰로 만들어서 UILabel안에 입력된 크기에 따라 width가 변하는 하나의 스택뷰를 만들기로 결정. 글자크기는 80pt로 주고 스택뷰로 묶어서 만든 결과 이런 결과가 나왔다. 상하 여백이 넓게 존재해, 디자인한 UI와 맞지 않는다. 처음에는 이를 해결하기 위해 sizeToFit()함수를 사용했지만 여전히 똑같이 나온다. 글자가 UILabel의 중심에 있는것으로 보아, 이를 설정할 수 있는 변수가 존재한다고 생각하고, 공식 문서를 뒤져봤지만 존재하지 않았다. 몇 시간의 삽질 끝에 원인을 찾아냈다. 이런 문제가 발생한 이유 원인은 UILabel 자체가 아닌 font자체에 있다. 영어 노트를 생각해 보면..
상단 메뉴 바를 완성했으니, 메뉴바를 클릭하면, 해당 화면으로 화면이 변경되도록 해야 합니다. UITabBarController처럼, Controller를 만들어서 메뉴바와 화면을 가지고 있으면서, 사용자가 원하는 배치로 만들 수 있게 하겠습니다. class CustomTabBarViewController: UIViewController { lazy var menuBar: CustomMenuBar = { let menuBar = CustomMenuBar() menuBar.translatesAutoresizingMaskIntoConstraints = false return menuBar }() lazy var pageView: UIView = { let view = UIView() view.translat..