我正在學習 SwiftUI 課程,我想用多個值為我的視圖設定影片。在本教程中,animation修飾符在沒有 value 引數的情況下使用,但 XCode 表示它已被棄用。animation修飾符需要value現在。
我的目標是為該影片添加多個值,為此我想到了 Array。我有兩個布林值,show并showCard和一個CGSize。
我將這個陣列轉換為as [Any]因為兩個布林值和 1 個 CGSize 的陣列給出了這個錯誤:
Cannot convert value of type 'CGSize' to expected element type 'Bool'
當我使用 時as [Any],我無法符合Equatable。
Protocol 'Any' as a type cannot conform to 'Equatable'
然后我試過這樣:
as [Any : Equatable]
錯誤是:
Type 'Any' does not conform to protocol 'Hashable'
我可以嘗試很多事情,但我想了解:
- 如何為 1 個影片提供多個值?
或者
- 如何制作一個不同型別的陣列,都符合一個協議?
我的觀點代碼:
BackCardView()
.frame(width: 340, height: 220)
.background(Color(show ? "card4" : "card3"))
.cornerRadius(20.0)
.shadow(radius: 20)
.offset(x: 0, y: show ? -200 : -20)
.offset(x: viewState.width, y: viewState.height)
.offset(y: showCard ? -140 : 0)
.scaleEffect(showCard ? 1 : 0.95)
.rotationEffect(Angle(degrees: (show ? 0: 5)))
.rotationEffect(Angle(degrees: showCard ? -5 : 0))
.rotation3DEffect(Angle(degrees: showCard ? 5 : 0), axis: (x: 10.0, y: 0, z: 0))
.blendMode(.hardLight)
.animation(.easeInOut(duration: 0.3), value: [show, showCard, viewState])
uj5u.com熱心網友回復:
您需要分別應用各種影片,例如
.animation(.easeInOut(duration: 0.3), value: show)
.animation(.easeInOut(duration: 0.3), value: showCard)
.animation(.easeInOut(duration: 0.3), value: viewState)
也就是說:每個修改器將相同的影片應用于視圖,但在不同的條件下。
uj5u.com熱心網友回復:
這里的問題是你需要傳輸的陣列應該符合 equatable :
https://developer.apple.com/documentation/swift/equatable
當您的陣列包含 Bool 和 CGSize 時,swift 無法在 Bool 和 CGSize 之間執行相等。在這種情況下,讓它們相等是沒有意義的。
要實作您想要做什么,您只需添加 2 個影片:
.animation(.default, value: [show, showCard])
.animation(.default, value: viewState)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358232.html
上一篇:在采用閉包的視圖中使用閉包與方法
下一篇:為什么按鈕功能只能作業一次
