본문 바로가기

iOS 앱개발

(18)
036 ~ 042. Image and Color Image View 이미지는 종횡비가 중요하기 때문에 원본의 것을 유지하도록 Aspect Fit이나 Aspect Fill의 사용 빈도가 높다. 결과 Aspect Fill을 사용하면 오른쪽 사진처럼 Image View의 영역(프레임) 밖으로 나가는 부분이 생기는데 Drawing의 Clips to Bounds를 해제하면 프레임 밖의 영역에서도 이미지를 보이도록 허용할 수 있다. 다만 ImagaeView의 크기와 사용하려는 이미지의 크기는 맞춰 주는 것이 좋다. 이미지를 확대하거나 축소하는 프로세스가 빠지기 때문에 성능에도 긍정적인 영향을 미친다. Highlighted 속성에 별도의 이미지를 할당하면, Highlighted 상태가 될 경우 해당 이미지를 표시하게 된다. 조건에 따라 이미지를 변경해야 할 때 사..
014 ~ 019. Button, Picker and Page Control Target Action 007 ~ 013. View & Window (뷰와 윈도우)) 007 ~ 008 강의는 Xcode9 -> Xcode11 마이그레이션 강의로 따로 정리하지 않는다. View & Window Window(윈도우)와 View는 디바이스의 화면과 UI를 출력하고, 이벤트를 처리한다. 모든 앱은 적어도 하나 이상의 chillog.page 이전에 언급했던 UI 중에 Control에 해당하는 Button, Switch, Slider, Page Control, Date Picker, Segmented Control, Stepper의 공통된 기능은 모두 UIControl에 구현되어있다. Control은 각자 다양한 상태를 가지고 있고, 이를 시각적으로 표현하며, 다양한 이벤트를 전달하는데 이 이..
007 ~ 013. View & Window (뷰와 윈도우)) 007 ~ 008 강의는 Xcode9 -> Xcode11 마이그레이션 강의로 따로 정리하지 않는다. View & Window Window(윈도우)와 View는 디바이스의 화면과 UI를 출력하고, 이벤트를 처리한다. 모든 앱은 적어도 하나 이상의 윈도우를 가지고, 외부 디스플레이가 연결되면 두 개의 윈도우를 가진다. Window 터치 이벤트를 올바른 대상에 전달한다. 화면에 표시되는 뷰의 Controller 역할을 수행한다. interface builder를 사용하면 대부분의 과정이 자동으로 진행되지만, 그 외의 방식으로 구성하는 경우 윈도우를 직접 생성하고, 뷰를 직접 추가해야 한다. 새로운 화면으로 전환하는 경우, 윈도우에 추가되어있는 뷰를 다른 뷰로 대체하는 방식으로 진행한다. View 앱에서 시각적..
001 ~ 006. Interface Builder, Outlet and Action, Delegate Pattern Interface Builder interface 구성 방법 xib File Storyboard 이전에 사용하던 방식. 모든 씬들이 각각의 파일로 구성됨. 씬들 사이의 관계에 시각적인 도움이 없으며, 화면 전환까지도 코드로 구현해야 함. 화면의 로딩 속도와 편집 속도가 빠름, 협업에 조금 더 적합. Storyboard 하나의 파일 내에 여러 씬들이 존재. 씬들 사이의 관계가 시각적인 표현으로 조금 더 직관적이지만, 씬이 늘어나면 속도가 느려짐. SwiftUI Code로 구성 xib File 방식과 Storyboard는 interfaceBuilder에서 작성한다. Interface Builder & Xcode Outlet and Action Outlet 코드를 통해 속성에 접근할 때 사용하는 연결 방식이다..
018 ~ 021. DB, Memo Editing (데이터베이스, 메모 수정) DB (데이터베이스) DB 작성 iOS 앱의 DB는 CoreData를 사용해서 만들어 진다. CoreData는 프로젝트 생성 시에 이미 활성화 해 둔 상태이고, 기본적인 내용 또한 자동으로 추가 된다. 바로 앱 이름의 '.xdatamodeld' 파일이 DB이자 CoreData 파일이다. 해당 파일은 데이터 저장 방식의 설계도 역할을 한다. 좌측 하단의 'Add Entity' 버튼을 툴러 Entity를 생성하고, 컨텐츠와 날짜를 저장 할 Attribute를 각각 생성한다. 최종적으로는 위와 같은 모습이 되어야 하며, Entity의 Attribute Inspector의 'Codegen'이 Class Definition으로 되어 있어야 한다. 이 상태로 빌드를 시도하면 에러가 발생하는데, 임시로 생성해 뒀던 ..
014 ~ 017. Memo Viewer and Data Connection (메모 뷰어, 데이터 연결) 메모 뷰어 위와 같이 새로운 화면이 우측에서 좌측으로 표시되는 걸 Push라고 한다. 또한, 뒤로 가기를 선택했을 때 기존의 화면이 좌측에서 우측으로 사라지고 이전의 화면을 보여주는 것을 Pop이라고 한다. 메모를 선택하면 메모 뷰어를 push 하고, 하단에 toolbar를 추가해 편집과 공유가 가능하도록 한다. 메인 스토리보드에서 라이브러리로 진입해 View Controller를 추가해 새 Scene(씬)을 생성한다. 해당 씬은 메모 뷰어로, 특정 메모를 선택하면 해당 씬으로 전환이 되어야 한다. 따라서 메인 화면의 Cell(셀)과 새 씬은 연결한다. 이후 표시되는 팝업에서 Show를 선택하면 자동으로 Navigation Bar와 뒤로 가기 버튼이 추가된 것을 확인할 수 있다. 이제는 해당 셀에 추가적..
009 ~ 013. Date Format, Write Memo, Cancel, Save (날짜 포맷, 메모 작성, 취소, 저장) Date Format (날짜 포맷) 기존의 TableView에서 표시하던 날짜의 형식은 솔직히 말하면 사용자에게 제공할 만한 정보가 아니다. 불필요한 정보가 포함되어 있고, 시인성이 떨어진다. 따라서 해당 부분을 조금 더 친절하게 바꿀 필요가 있다. class Memo { var content: String var date: Date init(content: String) { self.content date = Date() } static var dummyMemoList = [ Memo(content: "What I daid to you remains like a will.") } override func tableView(_ tableView: UITableView, cellForRowAt indexP..
005 ~ 008. Main Layout, Memo Class, Memo List Main Layout Main.storyboard에는 기본적으로 한 개의 Scene(씬)이 추가되어 있다. 그리고 이 씬은 ViewController 클래스와 연결되어 있다. 그냥 사용해도 괜찮지만 강의에선 해당 씬과 뷰 컨트롤러를 삭제한 상태로 개발을 시작한다. 따라서 해당 씬을 Delete로 삭제하고, 기존의 ViewController.swift 파일도 삭제하고 시작한다. 삭제 후엔 라이브러리를 통해 Navigation Controller를 선택한다. 라이브러리는 'Shift + Cmd + L'로 접근할 수 있다. 이후 엔 두개의 화면이 표시되는데, 좌측은 화면 이동을 담당하는 객체이고, 우측이 실제 화면이 출력되는 Scene이다. 따라서 목록을 표시할 수 있는 Table View Controller..