簡體   English   中英

在 SwiftUI 中動態更改動畫的持續時間

[英]Changing animation's duration dynamically in SwiftUI

我正在嘗試在動畫時更改動畫的持續時間。 我有兩個屬性 - isAnimating確定 animation 是否應該運行和duration 有一個正在動畫的視圖,按鈕切換isAnimating和 Slider 綁定到持續時間 state。 當 animation 正在播放並且我使用 Slider 更改值時,持續時間不會改變。 有什么方法可以實現我想要的嗎?

struct ContentView: View {
    @State var isAnimating = false
    @State var duration = 2.0
    
    var body: some View {
        VStack {
            Spacer()
            Circle()
                .frame(width: 50.0, height: 50.0)
                .scaleEffect(isAnimating ? 2.0 : 1.0)
                .animation(
                    isAnimating ?
                        Animation.easeOut(duration: duration).repeatForever(autoreverses: false) :
                        .default
            )
            
            Spacer()
            
            Button(
                action: { self.isAnimating.toggle() },
                label: { Text("Tap") }
            )
            
            Spacer()
            
            Slider(value: $duration, in: (0.1 ... 5.0))
                .padding([.horizontal], 20.0)
                .padding([.bottom], 50.0)
        }
    }
}

我也嘗試了不同的方法,但總是有一些問題(例如動畫視圖閃爍)。

如果將 a.repeatForever() 修飾符添加到 animation 中,則 animation 將永遠運行(使用給定參數)。 唯一的可能是停止 animation 並“重新運行”一個新的 animation 並更改“持續時間”值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM