
- 在DetailView中添加头像点击功能,支持展示非当前用户的主页。 - 更新OptimizedDynamicCardView以支持头像点击回调。 - 修改DetailFeature以管理用户主页显示状态。 - 在MeView中添加关闭按钮支持,优化用户体验。 - 确保其他页面的兼容性,未影响现有功能。
74 lines
2.1 KiB
Swift
74 lines
2.1 KiB
Swift
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()
|
|
} |