Yan*_*ivH 4 ios swiftui swiftui-transition
我是 SwiftUI 的新手,我正在尝试使用.transition,但由于某种原因没有发生转换。
你可以看到下面的代码:
看法
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
if self.viewModel.model.show {
Text("Showing")
.padding()
} else {
Text("Not Showing")
.padding()
.transition(.asymmetric(insertion: .scale, removal: .opacity))
}
Button {
self.viewModel.show()
} label: {
Text("Tap to change")
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图模型
class ViewModel: ObservableObject {
@Published private(set) var model = Model()
func show() {
self.model.toggleShow()
}
}
Run Code Online (Sandbox Code Playgroud)
模型
struct Model {
var show: Bool = true
mutating func toggleShow() {
self.show.toggle()
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击按钮时,文本会发生变化,但不会发生转换。
我觉得我在这里错过了一些微不足道的东西。
有人可以帮忙吗?
Asp*_*eri 10
您需要一个动画(对过渡进行动画处理)和一个容器(执行实际的过渡,因为默认隐式Group不会执行此操作)。
这是代码的固定部分(使用 Xcode 13.2 / iOS 15.2 测试)
*注:Preview > Debug > Slow Animation为了更好的可见性
var body: some View {
VStack { // << this !!
if self.viewModel.model.show {
Text("Showing")
.padding()
} else {
Text("Not Showing")
.padding()
.transition(.asymmetric(insertion: .scale, removal: .opacity))
}
}
.animation(.default, value: self.viewModel.model.show) // << here !!
Button {
self.viewModel.show()
} label: {
Text("Tap to change")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3983 次 |
| 最近记录: |