728x90

UIKit 9

UIListContentConfiguration, UIBackgroundConfiguration, UICellConfigurationState

안녕하세요. 우연히 봤는데, UITableViewCell에서 textLabel, detailTextLabel, imageView가 deprecated 되었더라구요? 들어가서 보니, contentConfiguration이라는 것을 사용하라고 합니다. (WWDC20) Modern cell configuration을 보면서 뭔지 공부해볼게요. ## UIListContentConfiguration iOS 13 이하에서는 아래처럼 cell의 built-in imageView, textLabel 사용했어요. class ViewController: UIViewController, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! let data =..

UIKit 2022.07.25

viewDidLayoutSubviews

안녕하세요. 다들 알고 계셨겠지만... 저는 이번에 삽질하면서 처음 알게 된 viewDidLayoutSubviews에 대해서 간단하게 알아보려고 해요. 우선.. 제가 삽질하게 된 상황 설명하면서 글을 이어나갈게요. (나중에 똑같은 삽질은 하지 말쟈..) 저는 화면에 UIImageView를 원형으로 출력시키고 싶었어요. 그래서 스토리보드에 UIImageView를 넣고 AutoLayout을 걸어줬어요. 화면 정중앙 UIImageView의 width : height = 1 : 1 (정사각형 모양) UIImageView의 width는 현재 ViewController width의 1/2 그다음 UIImageView를 원형으로 만들기 위해서, ViewController에서 아래처럼 cornerRadius를 설정해줬..

UIKit 2022.07.24

UIKeyboardLayoutGuide

안녕하세요. 이번에는 iOS 15부터 추가된 UIKeyboardLayoutGuide 사용법에 대해서 간단하게 알아볼게요. # 1. UIKeyboardLayoutGuide UITextField를 쓰면서 keyboard가 뷰를 가리는 이슈를 한 번쯤은 겪으셨을 것 같아요. 그 이슈를 해결하기 위해 저희는 꽤나 복잡한(사실 귀찮은...) 작업들을 해왔어요. 1. Notification을 등록해주고 2. 키보드가 화면에 출력될 때 3. 뷰의 레이아웃(offset)을 조절한다. 그런데 iOS 15부턴 이런 일들이 필요없게 되었습니다. UIKeyboardLayoutGuide라는 클래스가 새로 나왔기 때문이죠. 대략적으로 살펴보면, UIKeyboardLayoutGuide는 UIView의 프로퍼티이며, 대부분의 경우 ..

UIKit 2022.03.29

Image 비동기 로딩 API (UIKit)

안녕하세요. 이번에는 UIKit에서 이미지를 비동기로 로딩할 수 있는 API들에 대해 소개해보려고 합니다. 보통 UICollectionView, UITableView에서 스크롤을 하면, 이미지 로딩 때문에 조금씩 끊기는 현상을 볼 수 있어요. 그 원인은 첫째, 이미지 로딩할 때 디코딩이 필요한데 디코딩 작업이 메모리를 많이 사용하기 때문이에요. 둘째, 이미지 디코딩은 main thread에서 작업을 해야 하고 화면에 출력될 때 디코딩하는 lazy 한 방식을 사용하기 때문이에요. 물론, background에서 로딩, 디코딩할 수 있는 API가 있지만 워낙 low-level의 API이고 메모리 관리를 직접 해줘야 하는 불편함이 있어서 쉬운 작업은 아니에요...ㅠㅠㅠ 그런데!! iOS 15부터 훨씬 쉽게 ba..

UIKit 2022.03.23

DiffableDataSource를 사용해서 TableView 드래그&드롭 기능 넣기

안녕하세요. 이번에는 전에 공부한 DiffableDataSource를 UITableView에 적용해보고 드래그 & 드롭 기능까지 추가해보는 시간을 가져볼게요. (전체 프로젝트는 github에 올려두었습니다.) 아래는 결과 화면이에요ㅎㅎ 이번 글은 아래 글을 토대로 작성하였습니다. * https://www.swiftjectivec.com/tableview-diffable-datasource-drag-to-reorder/ Drag to Reorder in UITableView with Diffable Datasource Support drag to reorder in a UITableView using a diffable datasource. www.swiftjectivec.com * https://www...

UIKit 2022.02.19

DiffableDataSource

이번 글은 DiffableDataSource에 대해 알아보겠습니다. ## 1. Data Source 프로토콜? 🤔 DiffableDataSource는 뒤에 Data sources라는 말이 붙었듯이, collection View와 tableView에서 사용하는 클래스에요. 우선 DiffableDataSource를 쉽게 이해하기 위해선 기존에 UI가 어떤 방식으로 업데이트되었는지 알아야 해요. 기존 Data Source 프로토콜 방식이 어땠는지 살펴볼게요. UI가 업데이트되어야 할 경우에는 UI가 Controller에게 - section의 개수는 몇 개야? - section 안에 cell의 개수는 몇 개야? - cell은 어떻게 그려야 해? - ... 을 물어보게 됩니다. 만약에 서버 통신을 해야 한다면 C..

UIKit 2022.02.19

UICollectionView (2)

저번 글 UICollectionView (1)에 이어서 진행할게요. (이전 글에서 구현한 코드를 그대로 사용할 거예요) 글 쓰기 전에 이전 글에서 구현한 전체 소스코드를 먼저 보여드릴게요. class ViewController: UIViewController { private var data = (0...21).map{ String($0) + ".png" } @IBOutlet weak var collectionView: UICollectionView! override func viewDidLoad() { super.viewDidLoad() collectionView.delegate = self collectionView.dataSource = self } } extension ViewController:..

UIKit 2022.02.17

UICollectionView (1)

이번 글은 UICollectionView에 대해 간략하게 알아보려고 합니다. 우선 공식 문서부터 살펴볼게요. An object that manages an ordered collection of data items and presents them using customizable layouts. 정렬된 아이템 collection을 관리하고, 그 collection을 커스텀 가능한 layout을 사용해서 화면에 출력합니다. The collection view gets its data from the data source object, stored in the collection view’s dataSource property. For your data source, you can use a UICollec..

UIKit 2022.02.13

Autoresizing Mask, translatesAutoresizingMaskIntoConstraints

뷰를 배치하는 방법에는 autolayout만 있는 줄 알았는데, autoresizing이라는 것이 있더라구요.. (기초 같은데 몰랐다니.....;;;) 이제라도 알아보자..라는 심정으로 autoresizingMask에 대해 알아보려고 합니다. 알아보는 김에 translatesAutoresizingMaskIntoConstraints이 어떤 역할을 하는지도 같이 알아볼게요. (뷰를 코드로 배치할 때 습관처럼 translatesAutoresizingMaskIntoConstraints = false로 줬는데 이젠 그 이유를 알아야 할 때가 온 것 같습니다...) #1 AutoresizingMask 우선 autoresizingMask의 apple document부터 보겠습니다. An integer bit mask..

UIKit 2022.02.11