티스토리 뷰
안녕하세요. 밀쿄입니다.
오늘은 코드로 화면 짤 때 조금 더 편하게 짜는 방법에 대해 알아보겠습니다.
코드르 화면 짤 때 화면을 미리 볼 수 없어서 많이 불편했습니다.
실제로 화면 하나를 수정하기 위해서 수정 -> 빌드를 몇 번이나 반복한 적도 있습니다..( 이건 제가 실력이 없어서 그럴지..)
그치만 XCode 11이 나오고 SwiftUI에서 사용할 수 있는 XCode의 Canvas뷰? Canvas모드?를 활용하면 조금 더 편하게 코드를 짤 수 있습니다.
이 팁을 처음본건 작년 Let's Swift였는데 그 때만 해도 캔버브뷰만 틀면 제 엑스코드가 자주 먹통이 되어버려서..
포스팅을 안하고 있었는데요..11.4부턴 조금 덜 먹통이 되길로 남겨봅니다..
위에서 말했듯이 SwiftUI에서 사용할 수 있는 방법이기 때문에 기존에 화면 SwiftUI에서 사용할 수 있는 Object로 만들어줘야합니다.
https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable
이 프로토콜을 채택해서 만들면 됩니다.
이제 같이 만들어봅시다.
UIKit으로 만들어진 클래스 밑에
다음과 같이 선언해줍시다.
#if canImport(SwiftUI) && DEBUG
import SwiftUI
#endif
이제 이러고 나서 UIViewControllerRepresentable을 채택하는 구조체를 만들어줍시다.
그러면 XCode에서 두 감지 함수를 생성하라고 할 것인데.
func makeUIViewController(context: Context) -> ViewController { }
func updateUIViewController(_ uiViewController: ViewController, context: Context) { }
이 두 가지 함수를 구현해줘야합니다.
쉽게 생각하면 make로 시작하는 함수는 UIViewController를 초기화하고 생성하는 함수 입니다.
update로 시작하는 함수는 UIViewController가 업데이트가 필요하면 호출되는 함수 입니다.
이제 이렇게 SwiftUI에서 사용할 수 있는 Object를 만들고나면
PreviewProvider라는 프로토콜을 채택해서 다음과같이 만들어주시면 됩니다.
struct MainViewControllerPreview: PreviewProvider {
static var previews: some View {
//위에서 만들어준 구조체를 여기서 생성
}
}
이제 준비는 다 끝났습니다.
이제 Xcode에서 캔버스 뷰를 켜봅시다.
이렇게 사용하시면 됩니다.
이제 왼쪽에 코드를 바꿀 때마다 자동으로 오른쪽에 업데이트가 됩니다.
'Swift&IOS' 카테고리의 다른 글
VoiceOver: App Testing Beyond The Visuals (0) | 2021.01.05 |
---|---|
[MVC to MVVM 01] 일단 MVC부터.. (0) | 2020.04.09 |
UIWindow (1) | 2020.01.13 |
flatMap, compactMap (0) | 2020.01.10 |
rethrows (0) | 2020.01.09 |
- Total
- Today
- Yesterday
- 알고리즘
- 삨
- MVC
- compactMap
- Just
- 결합연산자
- swift
- AutoLayout
- CombineLatest
- replaceNil
- 유니온파인드
- ErrorHandling
- 자료구조
- 스위프트
- BBIK
- 스유
- SEQUENCE
- 텔큐온
- 스위프트유아이
- 스택뷰
- ios
- Apple
- Queue
- programmers
- 현업이그리운
- 콤바인
- SwiftUI
- UIViewControllerRepresentable
- iOSCombine
- combine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |