[英]SwiftUI: show fullScreenCover without animation
由於“缺乏技術細節”, 這個驚人的問題被關閉了,所以我肯定會在這里放很多。
設置:
AppleApp.swift
import SwiftUI
@main
struct AppleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
ContentView.swift
import SwiftUI
struct ContentView: View {
@State var isLocked = true
var body: some View {
VStack {
Text("Unlocked view")
.padding()
}.fullScreenCover(isPresented: $isLocked) {
} content: {
LockScreen($isLocked)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
LockScreen.swift
import SwiftUI
struct LockScreen: View {
@Binding var isLocked: Bool
init(_ isLocked: Binding<Bool>) {
self._isLocked = isLocked
}
var body: some View {
ZStack {
Color.gray
VStack {
Text("Locked")
Button("Unlock") {
print("unlock button pressed")
isLocked = false
}
}
}
}
}
struct LockScreen_Previews: PreviewProvider {
@State static var isLocked: Bool = true
static var previews: some View {
LockScreen($isLocked)
}
}
問題:
看一下視頻:應用程序啟動后,“解鎖視圖”可見,並且在 animation 短暫延遲后出現“LockScreen”。
期望的結果:
該應用程序在啟動后顯示“LockScreen”,但可以通過按“解鎖”按鈕將其關閉。
根據您對@AlexanderThoren answere 的評論。 我添加了 animation 並簡化了代碼。
添加過渡 animation。
添加此擴展以隱藏 - 顯示視圖。
extension View {
func showLockView(isLocked: Binding<Bool>) -> some View {
ZStack {
self
if isLocked.wrappedValue {
LockScreen(isLocked: isLocked).animation(.default).transition(AnyTransition.move(edge: .bottom))
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
}
}
並將其與您的內容視圖一起使用
struct ContentView: View {
@State var isLocked = true
var body: some View {
VStack {
Text("Unlocked view")
.padding()
}
.showLockView(isLocked: $isLocked) // << Here
}
}
編輯:正如評論中提到的,這里是沒有查看擴展的解決方案。
struct ContentView: View {
@State var isLocked = true
var body: some View {
ZStack {
VStack {
Text("Unlocked view")
.padding()
}
if isLocked {
LockScreen(isLocked: $isLocked)
.edgesIgnoringSafeArea(.all)
.animation(.default)
.transition(AnyTransition.move(edge: .bottom))
}
}
}
}
希望您覺得這個有幫助。 我知道它沒有 FullScreenCover,但這會立即顯示出來。
import SwiftUI
struct ContentView: View {
@State var isLocked = true
var body: some View {
if self.isLocked {
LockScreen(isLocked: self.$isLocked)
} else {
VStack {
Text("Unlocked view")
.padding()
}
}
}
}
struct LockScreen: View {
@Binding var isLocked: Bool
var body: some View {
ZStack {
Color.gray
VStack {
Text("Locked")
Button("Unlock") {
print("unlock button pressed")
isLocked = false
}
}
}
.ignoresSafeArea()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.