ios - 在 SwiftUI 中重新创建 twitter 的复制到剪贴板动画

标签 ios swift swiftui

在 Twitter 应用程序中,当您点击共享按钮,然后点击复制链接按钮时,显示“ 复制到剪贴板 ”的 View 将从顶部移动到屏幕中。它在屏幕顶部停留大约 1 秒钟,然后它移回屏幕上方并消失。像这样:
enter image description here
我的目标是在我双击 TextView 时在我的 SwiftUI 应用程序中创建相同的效果。但我就是不知道如何实现这种效果。这是我能得到的最好的:

import SwiftUI

struct ContentView: View {
    @State private var copied = false
    var body: some View {
        GeometryReader { gr in
            ZStack {
                if copied {
                    Text("Copied to clipboard")
                        .padding()
                        .background(Color.blue.cornerRadius(20))
                        .position(x: gr.frame(in: .local).midX)
                        .transition(.move(edge: .top))
                        .animation(Animation.easeInOut(duration: 2).repeatCount(2))
                }
                
                VStack {
                    Text("Copy")
                        .onTapGesture(count: 2) {
                            self.copied.toggle()
                        }
                }
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
}

最佳答案

struct ContentView: View {
    @State private var copied = false {
        didSet {
            if copied == true {
                DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                    withAnimation {
                        copied = false
                    }
                }
            }
        }
    }
    var body: some View {
        GeometryReader { geo in
            ZStack {
                if copied {
                    Text("Copied to clipboard")
                        .padding()
                        .background(Color.blue.cornerRadius(20))
                        .position(x: geo.frame(in: .local).width/2)
                        .transition(.move(edge: .top))
                        .padding(.top)
                        .animation(Animation.easeInOut(duration: 1))
                }
                
                VStack {
                    Text("Copy")
                        .onTapGesture(count: 2) {
                            withAnimation {
                                copied = true
                        }
                    }
                }
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
}
结果:
enter image description here

关于ios - 在 SwiftUI 中重新创建 twitter 的复制到剪贴板动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65031408/

相关文章:

swift - SwiftUI 小部件中的 UIKit UserDefaults

ios - 如何在 SwiftUI 中管理 AVPlayer 状态

在推送 View 中修改列表绑定(bind)属性时,SwiftUI 导航会弹出

ios - 如何从ios中的非ui线程发送http请求

ios - swift - 跳跃时暂停动画

iphone - 如何找出一个人的手指何时离开屏幕?

ios - 快速添加 UICollectionView 代替导航栏标题

iOS 15 : Remove empty space before cells in UITableView

ios - 使用 Swift 的 Firebase 推送通知在 ios 11.4 中不起作用

iOS 客户端-服务器应用程序 : HTTP or TCP/IP?