ios - 如何在 SwiftUI 中动画/过渡文本值更改

标签 ios swift animation swiftui

我正在尝试使用 withAnimation 为文本中的值更改设置动画。但它似乎不起作用。我遇到过类似的问题,但 answer没有为文本值设置动画。
我正在尝试在纯 SwiftUI 中重新创建此行为
(UIKit Example):
enter image description here
我已经尝试过这段代码,但它不会为文本更改设置动画:

struct TextAnimationView: View {
    @State private var textValue = "0"
    var body: some View {
        VStack (spacing: 50) {
            Text(textValue)
                .font(.largeTitle)
                .frame(width: 200, height: 200)
                .transition(.opacity)
            Button("Next") {
                withAnimation (.easeInOut(duration: 1)) {
                    self.textValue = "\(Int.random(in: 1...100))"
                }
            }
        }
    }
}
我对 SwiftUI 的经验很少,还有其他方法可以实现吗?
提前致谢 :)

最佳答案

所以事实证明这真的很容易

Text(textValue)
  .font(.largeTitle)
  .frame(width: 200, height: 200)
  .transition(.opacity)
  .id("MyTitleComponent" + textValue)

注意额外的id在最后。 SwiftUI 在重绘时使用它来决定是否处理相同的 View 。如果 id 不同,则假定前一个 View 已被删除,而此 View 已被添加。因为它正在添加一个新 View ,所以它按预期应用了指定的转换。

注意:这个 id 很可能对于整个 View 树应该是唯一的,因此您可能需要注意相应地为其命名空间(因此示例中的 MyTitleComponent 前缀)。

关于ios - 如何在 SwiftUI 中动画/过渡文本值更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59157595/

相关文章:

ios - 在屏幕外绘制图像会导致性能下降

iphone - 检测 iPhone 音量按钮向上按下?

ios - 没有为 UITextField 正确添加 inputAccessoryView

ios - 如何在 Swift 3 中使用带有指数和模数的 RSA 来加密密码?

android - 如何在 android 的 lottie 动画中创建一个按钮?

animation - 使用Core Animation,是否可以为多个CALayer组合动画?

javascript - 在特定时间段内使用 JavaScript 更改 HTML 元素的背景颜色?

ios - 在 WatchKit WKInterfaceTable 的表格行中布置对象

ios - 如何使用服务器中的数据创建多个 MapKit 注释?

Swift 编译器错误 : Segmentation-fault 11 thrown when using type constraints