![](/img/trans.png)
[英]How to animate the transition between light and dark mode using SwiftUI?
[英]SwiftUI: how to animate transition between two Images using a delay?
我有兩個圖像ImageA
和ImageB
,我的目標是通過以下方式為它們之間的過渡設置動畫:
ImageA
已加載ImageA
轉換為ImageB
,持續時間為 1.5 秒使用常規 Swift,它將使用帶有動畫持續時間和暫停的UIView.animate
閉包。
這是我對 SwiftUI 的嘗試,它沒有顯示平滑的過渡,而是硬圖像更改:
VStack(alignment: .leading, spacing: 0) {
Image(images.randomElement()!)
.resizable()
.scaledToFill()
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
withAnimation() { //added
self.shouldTransition.toggle()
}
}
if shouldTransition {
Image(images.randomElement()!)
.resizable()
.animation(.easeInOut(duration: 1.5))
.scaledToFill()
}
}
我的實現中缺少什么來為圖像過渡設置動畫?
編輯:整個代碼庫可以在這里找到: TestWidget Github
您必須在觀察到的變化周圍添加withAnimation() { ... }
包裝器,您希望對其進行動畫處理。
將您的代碼更改為
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
withAnimation(){
self.shouldTransition.toggle()
}
}
您沒有指定您想要哪種過渡,默認情況下 SwiftUI 使用不透明度...
嘗試以下
VStack(alignment: .leading, spacing: 0) {
if !shouldTransition {
Image(images.randomElement()!)
.resizable()
.scaledToFill()
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.shouldTransition.toggle()
}
}
//.transition(.move(edge: .top)) // uncomment to modify transition
}
if shouldTransition {
Image(images.randomElement()!)
.resizable()
.scaledToFill()
//.transition(.move(edge: .top)) // uncomment to modify transition
}
}.animation(.easeInOut(duration: 1.5), value: shouldTransition)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.