feat: 新增用户ID显示组件和头像样式优化
- 创建UserIDDisplay组件,支持ID显示和复制功能,增强用户交互体验。 - 更新MeView中的头像样式,调整尺寸和边框,提升视觉效果。 - 修改OptimizedDynamicCardView以使用新组件,确保一致性和复用性。 - 新增icon_copy图标资源,支持复制功能的视觉反馈。 - 更新AppSettingView中的布局,优化用户界面体验。
This commit is contained in:
68
yana/Views/Components/UserIDDisplay.swift
Normal file
68
yana/Views/Components/UserIDDisplay.swift
Normal file
@@ -0,0 +1,68 @@
|
||||
import SwiftUI
|
||||
|
||||
struct UserIDDisplay: View {
|
||||
let uid: Int
|
||||
let fontSize: CGFloat
|
||||
let textColor: Color
|
||||
|
||||
@State private var showCopiedFeedback: Bool = false
|
||||
|
||||
init(uid: Int, fontSize: CGFloat = 14, textColor: Color = .white.opacity(0.7)) {
|
||||
self.uid = uid
|
||||
self.fontSize = fontSize
|
||||
self.textColor = textColor
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack(spacing: 4) {
|
||||
Text("ID: \(String(uid))")
|
||||
.font(.system(size: fontSize))
|
||||
.foregroundColor(textColor)
|
||||
|
||||
Image("icon_copy")
|
||||
.resizable()
|
||||
.frame(width: 14, height: 14)
|
||||
.foregroundColor(textColor)
|
||||
}
|
||||
.onTapGesture {
|
||||
copyToClipboard()
|
||||
}
|
||||
.overlay(
|
||||
Group {
|
||||
if 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)
|
||||
UserIDDisplay(uid: 987654321, fontSize: 16, textColor: .black)
|
||||
}
|
||||
.padding()
|
||||
}
|
Reference in New Issue
Block a user