我想讓一個視圖出現,做一些事情,然后用DispatchQueue. 我想切換showHand以顯示手然后toggleHandAnimation使手左右移動。一段時間后,例如 5 秒,我希望那只手消失。
我在下面有一個實作,它似乎正在構建中,但似乎會有更好的方法。我有下面的代碼。
在您希望在不同的時間點異步運行多個任務的視圖實作視圖的指導是什么?
import SwiftUI
struct ContentView: View {
@State var toggleHandAnimation: Bool = false
@State var showHand: Bool = true
var body: some View {
if showHand {
Image(systemName: "hand.draw")
.font(Font.system(size: 100))
.offset(x: toggleHandAnimation ? -40 : 0, y: 0)
.animation(Animation.easeInOut(duration: 0.6).repeatCount(5))
.onAppear {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() 1, execute: {
toggleHandAnimation.toggle()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() 5, execute: {
showHand.toggle()
})
})
}
}
}
}

uj5u.com熱心網友回復:
我認為這就是你要找的:
struct ContentView: View {
@State var toggleHandAnimation: Bool = false
@State var showHand: Bool = true
var body: some View {
ZStack {
Color(uiColor: .systemBackground)
if showHand {
Image(systemName: "hand.draw")
.font(Font.system(size: 100))
.offset(x: toggleHandAnimation ? -40 : 0, y: 0)
.onAppear {
withAnimation(Animation.easeInOut(duration: 0.5).repeatCount(10)) {
toggleHandAnimation.toggle()
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() 5, execute: {
showHand.toggle()
})
}
}
}
}
}
有幾件事,你應該閱讀內在與外在影片。您試圖使用內在的,但對于這樣的情況,它應該是外在的(即,withAnimation()。此外,.animation(_ animation:)已被棄用,因為它無法正常作業。您應該使用.animation(_ animation:, value:).
此外,我調整了時間,以便影片結束并且手消失。使用 的withAnimation()好處是您可以為同一影片發生的多個事件設定影片。
如您所見,您無需嵌套DispatchQueues. 您只需要使視圖消失的那個。
最后,我將所有這些都放在 ZStack 中并為其設定顏色,以便始終有一個視圖可以回傳。原因是,如果突然沒有視圖回傳,這將崩潰。這就是影片結束時沒有顏色時會發生的情況。顯然,您可以擁有任何想要的視圖,這只是一個示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/354484.html
上一篇:C#將運算式放在括號中
下一篇:迅速延遲firebase事件
