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.
|
|
|
|
|
# MyQrCode - SwiftUI 版本
|
|
|
|
|
|
|
|
|
|
|
|
## 项目概述
|
|
|
|
|
|
|
|
|
|
|
|
这是一个使用 SwiftUI 构建的条码扫描器应用,支持二维码和多种条形码格式,已经从原来的 UIKit 版本完全转换为 SwiftUI。
|
|
|
|
|
|
|
|
|
|
|
|
## 主要变化
|
|
|
|
|
|
|
|
|
|
|
|
### 从 UIKit 转换为 SwiftUI
|
|
|
|
|
|
|
|
|
|
|
|
- **ScannerViewController.swift** → **ScannerView.swift**
|
|
|
|
|
|
- 使用 `@StateObject` 管理扫描器状态
|
|
|
|
|
|
- 使用 `UIViewRepresentable` 包装相机预览层
|
|
|
|
|
|
- 采用 MVVM 架构模式
|
|
|
|
|
|
|
|
|
|
|
|
### 新特性
|
|
|
|
|
|
|
|
|
|
|
|
1. **现代化的 UI 设计**
|
|
|
|
|
|
- 扫描框覆盖层,提供视觉引导
|
|
|
|
|
|
- 美观的按钮和文本样式
|
|
|
|
|
|
- 响应式布局
|
|
|
|
|
|
|
|
|
|
|
|
2. **改进的状态管理**
|
|
|
|
|
|
- 使用 `@Published` 属性包装器
|
|
|
|
|
|
- 通过通知中心传递扫描结果
|
|
|
|
|
|
- 更好的错误处理
|
|
|
|
|
|
|
|
|
|
|
|
3. **用户体验优化**
|
|
|
|
|
|
- 扫描成功后的震动反馈
|
|
|
|
|
|
- 清晰的扫描指导文本
|
|
|
|
|
|
- 优雅的模态展示
|
|
|
|
|
|
|
|
|
|
|
|
4. **多格式条码支持**
|
|
|
|
|
|
- 二维码 (QR Code)
|
|
|
|
|
|
- EAN-8 和 EAN-13 条形码
|
|
|
|
|
|
- Code 128 和 Code 39 条形码
|
|
|
|
|
|
- UPC-E 条形码
|
|
|
|
|
|
- PDF417 和 Aztec 码
|
|
|
|
|
|
|
|
|
|
|
|
5. **微信风格扫描界面**
|
|
|
|
|
|
- 扫描线动画效果
|
|
|
|
|
|
- 检测到条码时短暂暂停预览
|
|
|
|
|
|
- 条码位置中心点标记(绿色圆圈)
|
|
|
|
|
|
- 点击标记直接选择条码
|
|
|
|
|
|
- 支持重新扫描
|
|
|
|
|
|
|
|
|
|
|
|
## 文件结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
MyQrCode/
|
|
|
|
|
|
├── ScannerView.swift # 新的 SwiftUI 扫描器视图
|
|
|
|
|
|
├── ContentView.swift # 更新的主内容视图
|
|
|
|
|
|
├── MyQrCodeApp.swift # 应用入口点
|
|
|
|
|
|
└── ...其他文件
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 使用方法
|
|
|
|
|
|
|
|
|
|
|
|
1. 启动应用后,点击"开始扫描"按钮
|
|
|
|
|
|
2. 将二维码或条形码放入扫描框内
|
|
|
|
|
|
3. 扫描成功后:
|
|
|
|
|
|
- 短暂暂停预览并显示条码覆盖层
|
|
|
|
|
|
- 在相机预览上显示条码位置标记(绿色圆圈)
|
|
|
|
|
|
4. 在预览暂停时:
|
|
|
|
|
|
- 在相机预览上显示条码位置标记(绿色圆圈)
|
|
|
|
|
|
- 单个条码:1秒后自动显示结果
|
|
|
|
|
|
- 多个条码:点击绿色标记选择要解码的条码
|
|
|
|
|
|
- 点击"重新扫描"继续扫描
|
|
|
|
|
|
5. 单个条码自动选择,多个条码手动选择
|
|
|
|
|
|
6. 可以重复扫描新的条码
|
|
|
|
|
|
|
|
|
|
|
|
## 技术特点
|
|
|
|
|
|
|
|
|
|
|
|
- **SwiftUI**: 现代化的声明式 UI 框架
|
|
|
|
|
|
- **AVFoundation**: 相机和条码扫描功能
|
|
|
|
|
|
- **MVVM 架构**: 清晰的代码分离和状态管理
|
|
|
|
|
|
- **通知中心**: 组件间的松耦合通信
|
|
|
|
|
|
|
|
|
|
|
|
## 兼容性
|
|
|
|
|
|
|
|
|
|
|
|
- iOS 14.0+
|
|
|
|
|
|
- Xcode 12.0+
|
|
|
|
|
|
- Swift 5.3+
|
|
|
|
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
|
|
|
|
|
|
- 需要在真机上测试相机功能
|
|
|
|
|
|
- 确保在 Info.plist 中添加相机权限描述
|
|
|
|
|
|
- 扫描器支持屏幕旋转和尺寸变化
|
|
|
|
|
|
- 条码位置标记会自动适应屏幕变化
|