設定非常簡單:
- State/Observable/Computet 屬性,我們稱之為
S1 - 依賴于的視圖 (
V1, )V2S1
必須滿足以下條件:
V1應該有一個輸入/輸出的過渡并且是影片的- 其他視圖(例如)在更改
V2時不得影片S1 V2可以被其他狀態影片化(例如S2)
一些后果:
- 除非在此處使用禁用影片,否則使用
withAnimation { .. }onS1也會導致影片。V2.animation(nil) - 但是,
V2.animation(nil)這不是一種選擇,因為它們仍然需要由其他狀態變數設定影片S2。 - 因此我排除了
withAnimation { .. }
我準備了以下示例:
struct Test: View {
@State private var S1: Bool = false
@State private var S2: Bool = false
func VX(_ text: String, color: Color = .red) -> some View {
Text(text).padding(10).background(color).padding(10)
}
var transition: AnyTransition {
.move(edge: .top).combined(with: .opacity)
}
var body: some View {
VStack {
if S1 {
VX("V1")
.transition(transition)
.animation(.easeOut, value: S1) // <--- not working
}
VX("V2", color: S2 ? .red : .blue)
.offset(x: S1 ? 30 : 0)
Spacer()
HStack {
Button(action: changeS1) {
Text("Change S1")
}
Button(action: changeS2) {
Text("Change S2")
}
}
}
}
func changeS1() {
S1.toggle()
}
func changeS2() {
S2.toggle()
}
}
我認為他們實作影片的方式不起作用,因為視圖由同一個變數有條件地插入,因此在值(S1)發生變化時不存在,因此.animation(.., value: S1)無法檢測到任何變化,因此不會發生影片。
所以問題是:如何根據同時確定它的條件存在的變數來影片視圖的轉換?
任何想法表示贊賞 - 謝謝!
uj5u.com熱心網友回復:
.animation修改器應該應用于擁有條件視圖的容器,因此它可以影片出現/消失轉換,例如
VStack {
if S1 {
VX("V1")
.transition(transition)
}
// ... other code
}
.animation(.easeOut, value: S1) // < here !!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471663.html
標籤:迅速 迅捷 swiftui-动画 swiftui-过渡
上一篇:嘗試解碼動態JSON回應
