我在取消隐藏视图后触发动画,但不幸的是,除非我点击两次,否则动画无法工作
struct ContentView: View {
@State var animate = false
@State var isViewHidden: Bool = true
var body: some View {
VStack {
ZStack {
Circle()
.fill(.blue).opacity(0.25).frame(width: 40, height: 40).offset(y: self.animate ? 0 : 60)
.hides(isViewHidden)
}
.animation((Animation.linear(duration: 1.5).repeatForever(autoreverses: true))
, value: self.animate ? 0 : 60)
Spacer()
Button("Tap here") {
self.isViewHidden = false
self.animate.toggle()
}
}
.padding()
}
}
extension View {
@ViewBuilder
func hides(_ isHidden: Bool) -> some View {
if isHidden {
hidden()
} else {
self
}
}
}
1条答案
按热度按时间juzqafwq1#
SwiftUI使用一个 before view 和一个 after view 来制作动画。你在更新
self.animate
的同时引入了要制作动画的视图,所以Swift没有一个 before view 来制作动画。将View扩展名更改为:
这会使视图一直显示在屏幕上,但只是通过使其不可见来隐藏它。这样,视图从一开始就在那里进行动画制作。