티스토리 뷰
문제 상황 파악하기
UI를 구현할 때 가장 힘든 것 중 하나가 매번 빌드하면서 결과물을 확인하는 것이죠.
물론, Figma 등으로 UI 스펙이 확정된 경우 UI를 그리기 상대적으로 편하지만 그래도 여전히 UI 확인을 실시간으로 할 수 없다는 건 불편한 것 같아요.
특히 현업에서 빌드를 한 번 돌리는데 너무 많은 시간이 소요되었기 때문에 더 힘들었어요(단순 빌드가 20분 넘게 걸린 적도..).
그래서 이번에는 Preview를 통해 화면을 미리 볼 수 있는 기능을 구현해볼게요.
Preview 구현하기
우선 도구는 SwiftUI에요.
"내 프로젝트는 UIKit인데?" 하는 분이 있을 수도 있지만 프로젝트의 UI와 아무 상관이 없어요.
저 역시 프로젝트는 UIKit와 Snapkit으로 구현하고, SwiftUI는 Preview만을 위해서 사용했어요.
이제 방법을 살펴볼게요!
우선, Preview로 미리보기를 하고 싶은 ViewController에 SwiftUI를 import 해줄게요 :]
그리고 ViewController 외부, 원하는 위치에 아래 코드를 작성해요.
// MARK: - Preview
struct MainViewController_Previews: PreviewProvider {
static var previews: some View {
Container().edgesIgnoringSafeArea(.all)
}
struct Container: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let rootViewController = CafeSearchListViewController()
return UINavigationController(rootViewController: rootViewController)
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}
typealias UIViewControllerType = UIViewController
}
}
SwiftUI에 대해서 잘 모르더라도 대략적으로 이해 가능한 코드에요.
Container()를 보여주는 View를 previews라는 이름으로 만들어요.
그리고 이 Container를 살펴보면 UIViewControllerRepresentable이라는 프로토콜을 채택하는데 느낌상 아래 두 메서드를 작성하면 ViewController를 Represent 하게 해 주겠죠?
makeUIViewController(context:)에서 말 그대로 ViewController를 생성해요.
저의 경우, Navigation Controller로 구현할 것이라 rootViewController를 현재 ViewController로 정의한 후 넣어주었어요.
이렇게만 작성해도 갑자기 Xcode 화면이 분할돼요.
이제 프리뷰가 가능해요!
주의할 점은 시뮬레이터를 띄워서 확인하는 것이 아니라고 하더라도 시뮬레이터 설정이 제대로 되어있어야 해요.
iOS 앱이고 iPhone 13을 기준으로 만들었는데 시뮬레이션이 Mac으로 설정되어있으면 Preview가 작동하지 않아요 :]
'iOS 앱개발 > iOS' 카테고리의 다른 글
[iOS] RxTest를 통해 테스트하기 (0) | 2022.01.20 |
---|---|
[iOS] ViewController 초기화시 init과 ViewDidLoad의 차이 (0) | 2022.01.19 |
[iOS] 문자열에서 HTML 태그만 제거하기 (0) | 2022.01.03 |
[iOS] Kakao API 사용시 Date 타입이 iso8601일 때 iOS에서 Decoding이 안되는 경우 (0) | 2022.01.03 |
[iOS] Custom UIColor 만들기 (0) | 2022.01.02 |
- Total
- Today
- Yesterday
- Brackets#Stacks and Queues#Codility#Python
- django#slicing
- 랜선자르기#이분탐색#BOJ#Python
- 나무자르기#BOJ#이분탐색#Python
- 순열사이클#BOJ#Python
- 반복수열#백준알고리즘#Python
- django
- 종이자르기#분할정복#BOJ#Python
- 텀 프로젝트#백준알고리즘#Python
- 터틀비치#리콘#xbox#controller
- PassingCars#Codility#Python
- Triangle#Sorting#Codility#Python
- 쿼드트리#BOJ#분할정복#Python
- 파이썬알고리즘인터뷰#4장
- filter#isalnum#lower
- 날짜 계산#BOJ#완전탐색#Python
- 공유기 설치#BOJ#이분탐색#Python
- 암호코드#dp#BOJ#Python
- 리모컨#완전탐색#BOJ#Python
- Swift#Tuples#Range
- 미로 탐색#백준알고리즘#Python
- Distinct#Codility#Python
- N으로 표현#DP#Programmers#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 배열합치기#분할정복#BOJ#Python
- 백준 알고리즘#BackTracking
- 병든 나이트#BOJ#탐욕법#Python
- API#lazy#
- 섬의개수#백준알고리즘#Python
- 토마토#백준알고리즘#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |