iOS&Swift🍎/iOS

iOS Preview 보면서 codebase로 작업하기

천 원 2023. 7. 12. 17:10

기존에 codebase로 UI를 작성하다 보면 빌드를 해야 확인할 수 있어서 번거로울 때가 종종있습니다.

그래서 SwiftUI의 PreviewProvider를 활용해서 보면서 작업이 가능하도록 해보겠습니다.

 

1. ViewController Extension

UIViewControllerRepresentable를 사용해서 뷰컨을 SwiftUI에서 사용이 가능하도록 Extension 해줍니다

import UIKit
import SwiftUI

extension UIViewController {
    private struct Preview: UIViewControllerRepresentable {
        let vc: UIViewController
        
        func makeUIViewController(context: Context) -> UIViewController {
            return vc
        }
        
        func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
        }
    }
    
    func toPreview() -> some View {
        Preview(vc: self)
    }
}

 

 

2.  코드로 View 만들기

저는 NSLayoutConstraints를 사용해서 code로 UI를 만들었습니다.

import UIKit
import SwiftUI

class ViewController: UIViewController {
    
    let abc: UIButton = {
        let view = UIButton()
        view.setTitle("HUMONS: aa", for: .normal)
        view.setTitleColor(.black, for: .normal)
        view.backgroundColor = .yellow
        return view
    }()
    
    let button: UIButton = {
        let view = UIButton()
        view.setTitle("HUMONS: aa", for: .normal)
        view.backgroundColor = .blue
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = .white
        self.view.addSubview(abc)
        self.view.addSubview(button)
        
        abc.translatesAutoresizingMaskIntoConstraints = false
        button.translatesAutoresizingMaskIntoConstraints = false
    
        NSLayoutConstraint.activate([
            abc.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            abc.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            abc.heightAnchor.constraint(equalToConstant: 120),
            abc.widthAnchor.constraint(equalToConstant: 120)
        ])
        
        NSLayoutConstraint.activate([
            button.topAnchor.constraint(equalTo: abc.bottomAnchor, constant: 20),
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            button.widthAnchor.constraint(equalToConstant: 120),
            button.heightAnchor.constraint(equalToConstant: 120)
        ])
    }
}

시뮬레이터로 빌드

 

3. Preview 호출하기

해당 파일에 아래 코드를 추가 후 cmd + opt + enter 키를 통해서 Preview를 호출 해줍니다.

#if DEBUG
struct ViewControllerPreview: PreviewProvider {
    static var previews: some View {
        ViewController()
            .toPreview()
    }
}
#endif

 

 

그러면 codebase로 작성한 ui를 확인하면서 개발이 가능합니다.