You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.9 KiB
5.9 KiB
创建二维码界面跳转到自定义样式界面
概述
本文档描述了如何从创建二维码界面跳转到自定义样式界面的实现。用户现在可以在创建二维码时选择自定义样式,而不是直接生成标准二维码。
功能流程
1. 用户操作流程
创建二维码界面 → 填写内容 → 点击"创建"按钮 → 跳转到自定义样式界面 → 选择样式 → 保存二维码
2. 技术实现
CreateQRCodeView.swift 修改
添加状态变量:
@State private var navigateToStyleView = false
修改创建按钮行为:
Button("创建") {
if canCreateQRCode() {
navigateToStyleView = true
}
}
添加NavigationLink导航:
.background(
NavigationLink(
destination: QRCodeStyleView(qrCodeContent: generateQRCodeContent()),
isActive: $navigateToStyleView
) {
EmptyView()
}
)
新增二维码内容生成方法:
private func generateQRCodeContent() -> String {
switch selectedQRCodeType {
case .mail:
// 生成邮件格式内容
case .wifi:
// 生成WiFi格式内容
case .vcard:
// 生成vCard格式内容
case .mecard:
// 生成MeCard格式内容
// ... 其他类型
}
}
QRCodeStyleView.swift 修改
添加CoreData支持:
import CoreData
@StateObject private var coreDataManager = CoreDataManager.shared
移除NavigationView包装:
// 移除了NavigationView包装,因为现在通过NavigationLink导航
var body: some View {
VStack(spacing: 0) {
// 内容...
}
.navigationTitle("自定义样式")
.navigationBarTitleDisplayMode(.inline)
// ...
}
修改保存方法:
private func saveQRCode() {
guard let qrCodeImage = qrCodeImage else { return }
// 保存到相册
UIImageWriteToSavedPhotosAlbum(qrCodeImage, nil, nil, nil)
// 保存到历史记录
saveToHistory()
dismiss()
}
新增历史记录保存方法:
private func saveToHistory() {
let context = coreDataManager.container.viewContext
let historyItem = HistoryItem(context: context)
historyItem.id = UUID()
historyItem.dataType = DataType.qrcode.rawValue
historyItem.dataSource = DataSource.created.rawValue
historyItem.createdAt = Date()
historyItem.isFavorite = false
historyItem.qrCodeType = "custom"
historyItem.content = qrCodeContent
do {
try context.save()
} catch {
print("保存到历史记录失败:\(error.localizedDescription)")
}
}
支持的二维码类型
1. 邮件 (mailto:)
- 支持收件人、主题、正文、抄送、密送
- 格式:
mailto:email?subject=xxx&body=xxx&cc=xxx&bcc=xxx
2. WiFi
- 支持SSID、密码、加密类型
- 格式:
WIFI:S:SSID;T:ENCRYPTION;P:PASSWORD;;
3. vCard (3.0版本)
- 支持姓名、电话、邮箱、公司、职位、地址、网站
- 格式:标准vCard 3.0格式
4. MeCard
- 支持姓名、昵称、电话、邮箱、公司、职位、地址、网站、备注
- 格式:
MECARD:N:LastName,FirstName;NICKNAME:xxx;TEL:xxx;...;
5. 位置
- 支持经纬度
- 格式:
geo:latitude,longitude
6. 日历事件
- 支持事件标题、描述、位置、开始时间、结束时间
- 格式:标准iCalendar格式
7. 社交媒体
- Instagram:
instagram://user?username=xxx
- Facebook:
fb://profile/xxx
- Spotify:
spotify:search:artist;song
- X (Twitter):
twitter://user?screen_name=xxx
- WhatsApp:
whatsapp://send?phone=xxx
- Viber:
viber://add?number=xxx
- TikTok:
https://www.tiktok.com/@xxx
- Snapchat:
https://snapchat.com/add/xxx
8. 电话和短信
- 电话:
tel:xxx
- 短信:
SMSTO:xxx
9. URL
- 直接使用输入的URL
自定义样式功能
1. 颜色选择
- 前景色: 20种颜色(8种纯色 + 12种渐变色)
- 背景色: 10种浅色系
2. 点类型选择
- 40多种不同的点类型
- 包括基础形状、特殊形状、抽象形状、动态形状
3. 眼睛类型选择
- 40多种不同的眼睛类型
- 包括基础形状、特殊形状、动态形状
4. Logo选择
- 15种不同的Logo
- 包括社交媒体、通讯工具、其他服务
用户体验改进
1. 流程优化
- 用户填写内容后,点击"创建"按钮
- 通过NavigationLink导航到自定义样式界面
- 可以预览和调整二维码样式
- 最终保存到相册和历史记录
2. 数据持久化
- 自定义样式生成的二维码会保存到历史记录
- 类型标记为"custom"
- 可以在历史记录中查看和管理
3. 错误处理
- 输入验证确保内容有效
- 保存失败时的错误提示
- 网络和权限问题的处理
技术要点
1. 状态管理
- 使用
@State
管理界面状态 - 使用
@StateObject
管理CoreData - 使用
@Environment
获取dismiss环境
2. 数据传递
- 通过参数传递二维码内容
- 使用NavigationLink导航到自定义样式界面
- 异步处理二维码生成
3. 内存管理
- 及时释放图片资源
- 避免内存泄漏
- 优化大图片的处理
未来扩展
1. 样式模板
- 预设样式模板
- 用户自定义模板保存
- 模板分享功能
2. 批量生成
- 支持批量生成不同样式的二维码
- 批量导出功能
3. 高级样式
- 更多颜色选项
- 自定义Logo上传
- 动画效果
总结
通过这次修改,我们实现了从创建二维码界面到自定义样式界面的完整流程。用户现在可以:
- 在创建界面填写二维码内容
- 点击创建按钮通过NavigationLink导航到样式界面
- 选择喜欢的颜色、点类型、眼睛类型和Logo
- 预览生成的二维码
- 保存到相册和历史记录
这个实现提供了更好的用户体验,让用户能够创建个性化的二维码,同时保持了原有的功能完整性。