Использование Live Preview в UIKit

Повышение уровня разработки UIKit с помощью Live Preview: пошаговое руководство

С момента реализации Live Preview в Xcode я обнаружил, что это очень эффективный и удобный метод для тестирования и отладки моего кода SwiftUI. Возможность предварительного просмотра моих анимаций в режиме реального времени значительно сократила время разработки, что делает его идеальным инструментом для моей работы со SwiftUI. Я больше не полагаюсь на симуляторы или физические устройства для тестирования своего кода, так как Live Preview предлагает удобный и интуитивно понятный интерфейс.

UIKit — мощный инструмент для создания многофункциональных и интерактивных пользовательских интерфейсов. Может быть сложно быстро повторить дизайн и макет ваших представлений без создания и запуска приложения на симуляторе или устройстве. Вот тут-то и появляется Live Preview.

Чтобы использовать Live Preview с UIKit, мы должны обернуть наши UIViewControllers и UIViews в представления SwiftUI. Это может быть достигнуто с помощью протоколов UIViewControllerRepresentableи UIViewRepresentable.

UIViewControllerRepresentableи UIViewRepresentableявляются протоколами в структуре SwiftUI, которые позволяют вам представлять UIViewControllerили UIView, соответственно, в среде SwiftUI. Эти протоколы определяют методы и свойства, необходимые для создания или управления UIViewControllerэкземпляром UIViewв среде SwiftUI.

Настройка обертки

Мы создадим новый файл и назовем его LivePreview. Мы импортируем структуру SwiftUI и определим две структуры с именами UIViewControllerPreviewи UIViewPreviewв этом файле. Каждый соответствует UIViewControllerRepresentableи UIViewRepresentableсоответственно

UIViewControllerPreviewи UIViewPreviewявляются универсальными структурами, которые принимают параметр типа ViewControllerи Viewсоответствуют протоколу UIViewControllerи соответственно.UIView

struct UIViewControllerPreview<ViewController: UIViewController>: UIViewControllerRepresentable
struct UIViewPreview<View: UIView>: UIViewRepresentable

Подпись UIViewControllerRepresentable выглядит следующим образом:

protocol UIViewControllerRepresentable : View where Self.Body == Never

  • makeUIViewController(context:) -> UIViewController: этот метод используется для создания экземпляра UIViewController, который будет использоваться в предварительном просмотре.
  • updateUIViewController(_:context:): этот метод используется для обновления экземпляра UIViewController при изменении иерархии представлений SwiftUI.

Подпись UIViewControllerRepresentable выглядит следующим образом:

protocol UIViewRepresentable : View where Self.Body == Never

  • makeUIView(context:) -> UIView: этот метод используется для создания UIViewэкземпляра, который будет использоваться в предварительном просмотре.
  • updateUIView(_:context:): этот метод используется для обновления UIViewэкземпляра при изменении иерархии представлений SwiftUI.

Реализация

Мы настроим обязательную функцию в нашей структуре, о которой я упоминал ранее, как показано ниже.

struct UIViewControllerPreview<ViewController: UIViewController>: UIViewControllerRepresentable {
    let viewController: ViewController

    init(_ viewController: ViewController) {
        self.viewController = viewController
    }

    func makeUIViewController(context: Context) -> ViewController {
        viewController
    }

    func updateUIViewController(_ uiViewController: ViewController, context: Context) { }
}

struct UIViewPreview<View: UIView>: UIViewRepresentable {
    let view: View

    init(_ view: View) {
        self.view = view
    }

    func makeUIView(context: Context) -> UIView {
        return view
    }

    func updateUIView(_ view: UIView, context: Context) {
        view.setContentHuggingPriority(.defaultHigh, for: .horizontal)
        view.setContentHuggingPriority(.defaultHigh, for: .vertical)
    }
}

struct ViewController_Preview: PreviewProvider {
    static var previews: some View {
        UIViewControllerPreview(ViewController())
    }
}

После того, как это настроено, мы можем открыть режим холста, нажав Command + Option + Return. Это откроет Canvas в окне помощника редактора, что позволит нам увидеть предварительный просмотр нашего ViewController в реальном времени.

Когда мы вносим изменения в наш ViewController, например, обновляем цвет фона его представления, как на приведенном выше gif-файле, которым я поделился, мы можем видеть, как эти изменения отражаются в режиме реального времени в предварительном просмотре в реальном времени.

Таким образом, заключив наш UIKit UIViewControllerв структуру, соответствующую UIViewControllerRepresentableпротоколу, мы можем расширить Live Preview на наш UIViewController, что позволит повысить эффективность рабочего процесса при разработке и итерации нашего пользовательского интерфейса.

Если вам понравилось читать эту статью и она оказалась полезной, пожалуйста, похлопайте ей и подписывайтесь на меня, чтобы получать больше подобного контента в будущем ❤️

Suggested posts

«Этот маленький остров меняет все»

Как мы разработали Lyft Live Activity, чтобы повысить качество обслуживания пассажиров

«Этот маленький остров меняет все»

Карьера в корне меняет правила игры Из всего, что мы делаем в Lyft, постановка пикапов между пассажирами и водителями — одна из самых сложных и важных. Успех этой хореографии зависит от того, насколько хорошо Lyft справляется со многими задачами, но важно просто держать райдеров в курсе.

Жизненный цикл приложения

Жизненный цикл приложения

: Цикл от запуска приложения до завершения работы: удобство использования за счет управления памятью или данными. ⬆️ Безопасность может быть обработана. UIApplication, AppDelegate. Состояние, в котором приложение запущено, но никаких событий не получено. Активное: состояние, в котором приложение работает и происходит событие. фон и не запускать код для делегирования функций в файле AppDelegate.swift.

Related posts

Поиск информации о доменных именах

Отрывок из книги «Маленькие программные инструменты Sharp» Брайана П. Хогана.

Поиск информации о доменных именах

Когда вы делаете запрос на facebook.com, ваш компьютер ищет доменное имя, чтобы преобразовать это доменное имя в IP-адрес, чтобы ваш компьютер мог установить это соединение.

Журнал

Журнал

Открытый дневник: картинка в день. Меня всегда завораживали истории.

Убийство Джордана Нили и проблема «патриотического» расизма

Могут ли США сделать важный шаг и не приравнивать расистское поведение к тому, чтобы быть хорошим американцем?

Убийство Джордана Нили и проблема «патриотического» расизма

[Предупреждение: в этом эссе есть снимки экрана, на которых люди восхваляют убийцу Джордана Нили.] Сотрудники правоохранительных органов наконец — и, возможно, неохотно — предъявили обвинение в этом убийстве Дэниелу Пенни, человеку, который душил Джордана Нили, пока тот не умер.

Сольное выступление рыжеволосой девушки

По заданию Хайдена Кэти снимает, как она мастурбирует.

Сольное выступление рыжеволосой девушки

Было уже за полночь, когда Хейден отвез Кэти обратно в общежитие колледжа после их совместного вечера. У нее был ранний урок утром, и у нее не было другой смены одежды после того, как она осталась с ним прошлой ночью.