import SwiftUI struct UserIDDisplay: View { let uid: Int let fontSize: CGFloat let textColor: Color let isDisplayCopy: Bool @State private var showCopiedFeedback: Bool = false init(uid: Int, fontSize: CGFloat = 14, textColor: Color = .white.opacity(0.7), isDisplayCopy: Bool = false) { self.uid = uid self.fontSize = fontSize self.textColor = textColor self.isDisplayCopy = isDisplayCopy } var body: some View { HStack(spacing: 4) { Text("ID: \(String(uid))") .font(.system(size: fontSize)) .foregroundColor(textColor) if isDisplayCopy { Image("icon_copy") .resizable() .frame(width: 14, height: 14) .foregroundColor(textColor) } } .onTapGesture { if isDisplayCopy { copyToClipboard() } } .overlay( Group { if isDisplayCopy && showCopiedFeedback { Text("已复制") .font(.system(size: 12)) .foregroundColor(.white) .padding(.horizontal, 8) .padding(.vertical, 4) .background(Color.black.opacity(0.7)) .cornerRadius(4) .offset(y: -30) .transition(.opacity) } } ) } private func copyToClipboard() { UIPasteboard.general.string = String(uid) withAnimation(.easeInOut(duration: 0.2)) { showCopiedFeedback = true } DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { withAnimation(.easeInOut(duration: 0.2)) { showCopiedFeedback = false } } } } #Preview { VStack(spacing: 20) { UserIDDisplay(uid: 123456789, isDisplayCopy: true) UserIDDisplay(uid: 987654321, fontSize: 16, textColor: .black, isDisplayCopy: false) } .padding() }