我認為這是我在嘗試在 SwiftUI 中實作某種效果時提出的第三個問題。基本上,我正在嘗試為單擊按鈕后從螢屏底部向上滑動的選單設定影片。這種效果有一些技術細節:
“向上滑動”部分需要進行影片處理,并且向上滑動的視圖內的任何子視圖都不應呈現中間影片,從而導致體驗不連貫。看到這個問題斷斷續續的影片 SwiftUI 嵌套視圖
“向上滑動”視圖需要是一個白色的圓角矩形。(它將有文本子視圖)
為了增加對比度,當向上滑動的視圖向上滑動時,先前占據螢屏的視圖需要變暗。這也需要影片。
這是一些示例代碼,可以實作 1) 但在 2) 和 3) 處失敗。它在 2) 處失敗,因為向上滑動的視圖出于某種原因被空格括起來,因此白色圓角矩形沒有變暗的其他視圖的對比度。它在 3) 處失敗,因為我還沒有找到一種影片顏色變化的方法。
示例代碼:
struct ContentView: View {
@State var show: Bool = Bool()
var body: some View {
VStack {
Button(action: { show.toggle() }, label: { show ? Text("hide") : Text("show") })
.animation(nil)
Spacer()
Other(show: show)
.brightness(show ? -0.1: 0)
Spacer()
Group {
if show { CollapsibleView().transition(.move(edge: .bottom)) }
}
.opacity(show ? 1.0 : 0.0)
}
.animation(.linear(duration: 0.2))
}
}
struct Other: View {
var show: Bool
var body: some View {
ZStack {
Color.white
.brightness(show ? -0.1: 0)
}
}
}
struct CollapsibleView: View {
var body: some View {
RoundedRectangle(cornerRadius: 40)
.frame(height: 100)
.foregroundColor(.blue)
}
}
請注意,此處圓角矩形為藍色以顯示隨機空白之間的對比度。
uj5u.com熱心網友回復:
您可以嘗試使用偏移代替過渡以獲得更好的影片:
struct ContentView: View {
@State private var show: Bool = Bool()
var body: some View {
VStack {
Button(action: { show.toggle() }, label: { show ? Text("hide") : Text("show") })
Spacer()
CollapsibleView(show: show)
}
}
}
struct CollapsibleView: View {
let show: Bool
var body: some View {
RoundedRectangle(cornerRadius: 40)
.frame(height: 100)
.foregroundColor(.blue)
.padding(.horizontal)
.offset(y: show ? .zero : 200.0)
.animation(.default, value: show)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/315331.html
上一篇:在R中創建GIF影片
