목록전체 글 (25)
개발을 잘하고 싶은 주니어?
Collection View에 대해서 공부해보겠습니다. Collection View는 데이터의 나열이 자유롭습니다. 또한 UICollectionViewLayout 객체를 상속받아서 나만의 레이아웃도 만들 수 있습니다. UICollectionViewLayout : 컬렉션 뷰의 레이아웃을 전문적으로 관리하는 객체 또한 테이블 뷰와 마찬가지로 구현할 때는 DataSource와 Delegate 프로토콜을 채택해야 합니다. Data Source Collection View는 DataSource 오브젝트 (CollectionView.dataSource 프로퍼티에 저장되어 있음)로부터 데이터 정보를 받습니다. UICollectionViewDiffableDataSource 객체를 사용하면 collection view의..
MVVM 패턴을 공부해봅시다.! MVVM 패턴이 나오기 전에는 MVC 패턴을 많이 사용했습니다. MVC : Model (데이터), View (UI 요소), Controller (중개자) MVVM : Model, View, View Model 하지만 MVC 패턴에서 Controller가 할 일이 방대해짐에따라 코드가 많아지는 현상이 발생하게 됩니다. (여기서 뷰컨은 Massive View Controller라는 별명을 가지게 됩니다.) 이렇게 되면 유지보수하기도 힘들고 수정도 용이하지 않습니다. 이런 이유때문에 나온 게 MVVM 패턴입니다. MVVM 패턴은 Model(데이터), View (UI 요소, UIView, UIViewController), View Model (중개자)로 이루어져 있습니다. MVV..
옛날에는 spacer의 역할을 하는 dummy views를 생성해서 뷰 사이의 공간을 만들어 냈습니다. 하지만 현재는 Auto Layout, layout guides가 생겨서 dummy views는 더 이상 사용되지 않게 되었습니다. dummy views와 layout guides의 차이점은 무엇일까요? 1. 만약 더미 뷰가 스크린에 있으면 사용자가 제스처를 사용할 때, 원하는 뷰가 아닌 더미 뷰를 터치할 수 있습니다. 2. 더미 뷰 또한 view hierarchy에 포함되어 있는 상태에서 계속해서 유지되어야 하기 때문에 여러 개가 있는 경우에는 큰 성능 저하를 만들 수 있습니다. 반면에 layout guide는 view hierarchy에서 사각형 영역 하나만을 정의하기 때문에 성능 저하를 만들지 않습..
스크롤 뷰를 공부해보겠습니다. 스크롤 뷰는 내부 뷰의 스크롤과 줌을 할 수 있습니다. UIView를 상속받습니다. UIScrollView는 UIKit 내부의 클래스들이 상속받고 있습니다. (UITableView, UITextView 등의 클래스) 스크롤 뷰는 손가락의 움직임에 따라서 origin을 그에 따라서 조절합니다. 스크롤 뷰는 따로 다른 일은 하지 않고 vertical, horizontal scroll indicator로서의 역할만 합니다. 스크롤 뷰는 언제 스크롤을 멈출지를 알아야 해서 content view의 크기를 알아야 합니다 기본적으로는 끝까지 스크롤을 하면 그 아래로 더 스크롤되지 않고 다시 위로 튕겨 올라갑니다. 스크롤 뷰는 보통 많은 텍스트를 처리하고 싶을 때 또는, 큰 이미지를 유..
이번에는 테이블 뷰에 대한 공부를 해보겠습니다. 우선 인터페이스 빌더로 테이블 뷰를 생성해서 다른 뷰로 데이터를 넘겨주는 것을 해보겠습니다. 다음 2번에서는 코드로 이것들을 다시 구현하는 것을 해볼 예정입니다. Segue 테이블 뷰의 셀을 클릭했을 때 셀의 데이터가 다른 뷰로 넘어가도록 하기 위해서는 segue라는 개념을 알아야 합니다. 애플 문서에서 보면 UIStoryboardSegue 클래스는 두 개의 뷰 컨트롤러 사이에 시각적인 전환을 수행하고 준비하는 오브젝트라고 되어 있습니다. 쉽게 말하자면 현재 뷰컨에서 다른 뷰컨으로 넘어가는 것을 준비하고 수행하는 오브젝트라는 것입니다. Segue 오브젝트는 다음으로 넘어갈 뷰컨에 대한 정보가 포함되어 있습니다. segue가 수행되기 전에 (다음 뷰컨으로 넘..
생성자 UIView를 서브 클래싱 할 때는 두 개의 생성자를 구현할 수 있습니다. 1. init(frame:) : 특정 frame으로 뷰를 생성하고 싶을 때 사용합니다. 코드로 뷰를 추가할 때 사용됩니다. 구현 가장 첫 줄에는 super.init(frame: frame)을 추가해줍니다. 2. init(coder:) : 스토리보드나 .xib파일로 뷰가 생성될 때 사용됩니다. Main Run Loop UIApplication 객체는 앱이 실행될 때 Main Run Loop를 실행하고, 이 Run Loop로 이벤트를 처리합니다. (메인 스레드에서 작동) Main Run Loop 레이아웃 위치의 변화, 터치와 같은 이벤트들을 처리합니다. 이벤트를 모두 처리하면 Main Run Loop로 돌아오게 되고 이 시점을..
코드로 StackView 추가하기 스택 뷰를 이용해서 위의 이미지랑 똑같이 만들어보겠습니다. 먼저 필요한 이미지와 레이블을 위한 클래스를 생성해줍니다. (각각 ImageView.swift, labelView.swift) 이미지를 설정해주고, 레이블의 폰트를 설정해줍니다. (이미지는 제일 맛있는 명동교자칼국수입니당) class ImageView: UIImageView { override init(frame: CGRect) { super.init(frame: frame) setupImageView() } required init?(coder: NSCoder) { super.init(coder: coder) setupImageView() } private func setupImageView(){ image =..