Skip to content

zruiii/PicPick

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

PicPick - iOS 相册管理 APP

一个简洁优雅的 iOS 相册管理应用,采用类似 Tinder 的滑动交互方式,帮助你快速整理照片。

✨ 功能特性

核心功能

  • 卡片式滑动交互 - 左滑删除,右滑保留,流畅自然
  • 智能日期筛选 - 精确到天的日期范围筛选,支持快速选择
  • 批量删除管理 - 查看标记的照片数量和预计释放的空间
  • 实时进度追踪 - 清晰显示已处理和剩余照片数量
  • 权限智能管理 - 友好的权限请求和状态提示

UI/UX 亮点

  • 🎨 现代简洁的设计风格
  • 🌈 流畅的动画效果和手势反馈
  • 🌙 完整支持暗黑模式
  • 📱 适配各种屏幕尺寸
  • 🎯 直观的视觉指示器(红色删除/绿色保留)

🛠 技术栈

  • 框架: SwiftUI + Combine
  • 照片处理: PhotoKit
  • 架构模式: MVVM
  • 最低版本: iOS 16.0+
  • 语言: Swift 5.0+

📂 项目结构

PicPick/
├── Models/                     # 数据模型层
│   └── PhotoItem.swift        # 照片项目模型
├── Services/                   # 服务层
│   └── PhotoService.swift     # 相册服务(PhotoKit 封装)
├── ViewModels/                 # 视图模型层
│   └── PhotoManagementViewModel.swift  # 主视图模型
├── Views/                      # 视图层
│   ├── PhotoManagementView.swift      # 主视图
│   ├── PhotoCardView.swift            # 卡片滑动视图
│   ├── DateFilterView.swift           # 日期筛选视图
│   └── DeleteConfirmationView.swift   # 删除确认弹窗
├── Assets.xcassets/           # 资源文件
├── Info.plist                 # 配置文件
└── PicPickApp.swift          # App 入口

🚀 快速开始

环境要求

  • macOS 13.0+
  • Xcode 15.0+
  • iOS 16.0+ 真机或模拟器

安装步骤

  1. 克隆项目

    git clone <repository-url>
    cd PicPick
  2. 打开项目

    open PicPick.xcodeproj
  3. 配置 Info.plist(重要!)

    如果项目在 Xcode 中没有自动识别 Info.plist,请按以下步骤操作:

    a. 在 Xcode 中选择项目根目录 b. 选择 PicPick target c. 进入 Info 选项卡 d. 添加以下权限描述:

    Key Value
    Privacy - Photo Library Usage Description PicPick 需要访问您的相册来帮助您浏览和管理照片。
    Privacy - Photo Library Additions Usage Description PicPick 需要此权限来保存照片到您的相册。

    或者,在项目设置中指定 Info.plist 文件路径:

    • Target Settings → Build Settings
    • 搜索 "Info.plist File"
    • 设置为:PicPick/Info.plist
  4. 运行项目

    • 选择目标设备(建议使用真机测试相册功能)
    • 点击 Run (⌘R) 或选择菜单 Product → Run

📱 使用指南

首次使用

  1. 启动应用后,会请求相册访问权限
  2. 点击"授权访问"按钮
  3. 在系统弹窗中选择"允许访问所有照片"

基本操作

  • 左滑 - 标记照片为删除(显示红色图标)
  • 右滑 - 标记照片为保留(显示绿色图标)
  • 撤销 - 点击左下角撤销按钮
  • 日期筛选 - 点击顶部筛选图标,选择日期范围
  • 批量删除 - 点击底部删除按钮,确认后执行删除

高级功能

  • 快速日期选择: 支持"最近 7 天"、"最近 30 天"等快捷选项
  • 进度追踪: 顶部实时显示处理进度
  • 空间预览: 删除确认时显示将释放的存储空间

⚠️ 注意事项

权限配置

  • ✅ 必须在 Info.plist 中添加相册权限描述,否则应用会崩溃
  • ✅ 建议在真机上测试,模拟器可能无法完全模拟相册功能

性能优化

  • ✅ 使用缩略图加载,避免内存溢出
  • ✅ 实现了图片预加载机制
  • ✅ 批量操作前会显示预估信息

数据安全

  • ✅ 删除操作需要二次确认
  • ✅ 显示清晰的警告提示
  • ✅ 删除后无法恢复(系统级删除)

🎯 功能演示

1. 主界面

  • 顶部:进度条 + 已处理/总数统计
  • 中间:卡片式照片展示
  • 底部:撤销按钮 + 删除按钮 + 手势提示

2. 滑动交互

  • 向左滑动:红色删除指示器逐渐显示
  • 向右滑动:绿色保留指示器逐渐显示
  • 释放时:超过阈值触发操作,否则回弹

3. 日期筛选

  • 开启/关闭筛选开关
  • 选择开始和结束日期
  • 快速选择常用时间范围
  • 显示筛选信息和天数统计

4. 删除确认

  • 显示待删除照片数量
  • 显示预计释放的存储空间
  • 二次确认 + 警告提示
  • 删除过程中显示进度

🔧 自定义配置

修改滑动阈值

PhotoCardView.swift 中修改:

private let swipeThreshold: CGFloat = 100  // 默认 100

修改预加载数量

PhotoManagementViewModel.swift 中修改:

private func preloadNextImages(count: Int = 3)  // 默认 3 张

修改主题颜色

在视图文件中搜索 .blue.red,替换为你喜欢的颜色。

🐛 故障排查

问题:应用启动即崩溃

解决方案: 检查 Info.plist 是否正确配置了相册权限描述

问题:无法访问相册

解决方案:

  1. 检查权限是否授予
  2. 前往 设置 → PicPick → 照片 → 选择"所有照片"

问题:照片加载缓慢

解决方案:

  1. 减少预加载数量
  2. 降低缩略图目标尺寸
  3. 确保网络连接(iCloud 照片)

问题:删除失败

解决方案:

  1. 检查是否有写入权限
  2. 确认照片不是系统保护的
  3. 重启应用后重试

📝 开发说明

代码规范

  • ✅ MVVM 架构严格分层
  • ✅ 所有异步操作使用 async/await
  • ✅ SwiftUI 视图拆分为可复用组件
  • ✅ 完整的错误处理和用户提示

内存管理

  • ✅ 使用缩略图而非原图
  • ✅ 实现图片缓存管理
  • ✅ 及时释放不需要的资源

扩展建议

  • 🔲 添加照片编辑功能
  • 🔲 支持视频管理
  • 🔲 添加相册分类
  • 🔲 导出功能
  • 🔲 云同步支持

📄 许可证

本项目仅供学习和参考使用。

👨‍💻 贡献

欢迎提交 Issue 和 Pull Request!


享受整理照片的乐趣! 📸✨

About

滑动交互风格的 iOS 相册管理 APP

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages