如何根据 TextEditor 的文本更改为 SwiftUI 视图设置动画?

Posted

技术标签:

【中文标题】如何根据 TextEditor 的文本更改为 SwiftUI 视图设置动画?【英文标题】:How can I animate a SwiftUI view based on the change of a TextEditor's text? 【发布时间】:2020-12-09 18:01:17 【问题描述】:

我的应用有一个 SwiftUI 视图,其中包含一个用于收集日志条目的 TextEditor 和一个包含过去条目的列表。

当文本编辑器有一个非空字符串时,会显示一个按钮来处理条目,将其添加到填充列表的数据中,并重置 TextEditor。目前,每当键入文本时,按钮就会突然出现,我希望能够更流畅地制作动画,也许是通过淡化不透明度或放大按钮。但是,我不知道在哪里输入该动画。

   @State var newEntryString = ""
    
    var body: some View 
        NavigationView
            VStack
                Text("Create a new log entry.")
                    .padding()
                TextEditor(text: $newEntryString)
                    .cornerRadius(3.0)
                    .padding()
                    .border(Color.gray, width: 1)
                    .frame(minWidth: 0, idealWidth: 100, maxWidth: .infinity, minHeight: 0, idealHeight: 100, maxHeight: 150, alignment: .center)
                                
                HStack 
                    Spacer()
                    if !newEntryString.isEmpty

                        Button(action: 
                            addEntry()
                        ) 
                            Text("Add Entry")
                        .buttonStyle(JournalButtonStyle())
                        .animation(Animation.default.speed(1))
                    
                
                
                Divider()
                
                List 
                    ForEach(entrys)  item in
                        Text(item.timestamp!, formatter: entryFormatter).font(.footnote)
                            .foregroundColor(.gray)
                            .padding(.bottom, -10)
                        Text((item.entryString!))
                    
                    .onDelete(perform: deleteEntrys)
                .onTapGesture 
                    UIApplication.shared.endEditing()
                

【问题讨论】:

【参考方案1】:

在容器上使用动画,比如

HStack 
    Spacer()
    if !newEntryString.isEmpty

        Button(action: 
            addEntry()
        ) 
            Text("Add Entry")
        .buttonStyle(JournalButtonStyle())
    
.animation(Animation.default.speed(1))     // << here !!

【讨论】:

感谢您让我走上正确的道路。它还帮助我理解我需要将它放置在受动画影响的另一个视图上——更下方的列表。在这两个视图上放置 .animation 修饰符效果很好。

以上是关于如何根据 TextEditor 的文本更改为 SwiftUI 视图设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 TextEditor 显示多行?

SwiftUI TextEditor 如何隐藏键盘

如何将内部html的文本更改为id的文本

iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中更改为黑色?

即使在文本更改为没有任何链接的文本后,UITextView 超链接格式/功能仍然存在

如何在颤动中将状态栏图标和文本颜色更改为黑色?