SwiftUI iOS app custom lockscreen

Прошу прощения за столь размытый вопрос, только начал разбираться с программированием на Swift, после многих лет с .NET приходится менять способ мышления.

В приложении нужно реализовать блокировку ПИН-кодом.

Есть основной mainView и lockView

Когда приложение запускается/восстанавливается из фона нужно переключаться на lockView и требовать ПИН, после успешного ввода возвращаться на mainView.

Какие есть варианты реализации?

Пробовал использовать NavigationView на обеих формах и скрывать кнопку назад, переключение на экран ПИНа проходит нормально, назад никак не хочет, да и разметка приложения плывет из за этого.

UPD: Нашел рабочий вариант

App:

import SwiftUI

enum CurrView:Int {
    case lock
    case main
}

class OpDat : ObservableObject {
    @Published var currView = CurrView.lock
}

@main
struct myApp: App {
    private var opData = OpDat()

    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(opData)
        }
    }
}

ContentView:

import SwiftUI

struct ContentView: View {

    @EnvironmentObject var opData: OpDat

    var body: some View {
        switch(opData.lock){
        case .welcome:
            LockView()
                .environmentObject(opData)

        case .main:
            MainView()
                .environmentObject(opData)
        }
    }
}

Далее просто изменяем значение opData.currentView из любого места в приложении и View будет изменен без изменения стека нивигации


Ответы (1 шт):

Автор решения: Павел Лазарев

Попробуйте ZStack:

import SwiftUI

struct ContentView: View {

    @EnvironmentObject var opData: OpDat

    var body: some View {
        ZStack {
            switch opData.currView {
            case .welcome:
               LockView()
                   .environmentObject(opData)

            case .main:
                MainView()
                    .environmentObject(opData)
            }
        }
    }
}
→ Ссылка