關于 SwiftUI 中的影片,我有一個有趣的情況。在其簡化形式中,我有一個顯示一個矩形的視圖,當點擊該矩形時,它應該切換Bool系結并通過顏色的影片過渡來表示更改。NavigationView 但是,當視圖位于 a 內部并且系結來自 aStateObject而不是簡單的本地狀態時,似乎影片不會發生。我無法解釋為什么會這樣,并且會感激任何想法。
下面是顯示重現問題的簡化案例的代碼。應用程式代碼不是特別有趣;它是創建 aWindowGroup并在其中顯示一個實體的默認代碼ContentView。
import SwiftUI
class AppState: ObservableObject {
@Published var isRed = false
}
struct RectView: View {
@Binding var isRed: Bool
var body: some View {
Rectangle()
.fill(isRed ? Color.red : Color.gray)
.frame(width: 75, height: 75, alignment: .center)
.onTapGesture {
withAnimation(.easeInOut(duration: 1)) {
isRed.toggle()
}
}
}
}
struct ContentView: View {
@StateObject var appState = AppState()
@State private var childViewIsRed = false
var body: some View {
VStack {
NavigationView {
List {
NavigationLink("Link with binding to state object", destination: RectView(isRed: $appState.isRed))
NavigationLink("Link with binding to state variable", destination: RectView(isRed: $childViewIsRed))
}
}
.frame(height: 300)
RectView(isRed: $appState.isRed)
RectView(isRed: $childViewIsRed)
}
}
}
下面的 gif/video 是我展示了四件事,從下到上點擊這些視圖:
- 首先,我點擊最底部的矩形 - 一個系結到
@State屬性的矩形。它按預期切換影片。我再次點擊使其保持灰色。 - 然后我點擊底部的第二個矩形 - 一個系結
@Published到@StateObject. 一切都很好。 - 接下來,我點擊
NavigationLink指向系結到本地@State屬性的矩形的 。當我點擊矩形時,過渡影片效果很好。最底部的矩形也會影片,這是有道理的,因為它們系結到相同的屬性。 - 最后我點擊頂部
NavigationLink,這導致一個矩形系結@Published到@StateObject. 當我點擊這個矩形時,沒有影片。矩形捕捉到紅色。它下方的矩形(系結到相同的屬性)影片效果很好,證明該屬性確實是切換的。但是里面沒有影片NavigationView。為什么?我錯過了什么?
我已經搜索了現有的問題。我知道周圍有一些NavigationView(
uj5u.com熱心網友回復:
老實說,我不知道為什么,但是使用影片修改器RectView可以讓影片毫無問題地發生。
struct RectView: View {
@Binding var isRed: Bool
var body: some View {
Rectangle()
.fill(isRed ? Color.red : Color.gray)
.frame(width: 75, height: 75, alignment: .center)
.animation(.easeOut(duration: 1), value: isRed)
.onTapGesture { isRed.toggle() }
}
}
螢屏錄制示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/433141.html
