打造一款 macOS 图片浏览器:解决系统预览的痛点
- Published on
by
Vychod
应用预览

为什么需要这款应用?
作为一名开发者,我经常需要浏览大量的设计稿、截图和素材图片。macOS 自带的预览应用虽然功能强大,但在批量浏览图片时存在一些不便:
- 无法通过键盘左右键快速切换图片
- 没有缩略图视图,难以快速定位目标图片
- 不支持文件夹监控,新增图片需要重新打开
因此,我决定开发一款专门用于图片浏览的轻量级应用,解决这些痛点。
核心功能
1. 左右滚动浏览
支持多种方式切换图片:
- 键盘方向键(左右箭头)
- 界面上的导航按钮
- 空格键快速切换到下一张
- Cmd+左右箭头进行快速跳转
// 键盘快捷键处理示例
.keyboardShortcut(.leftArrow, modifiers: [])
.keyboardShortcut(.rightArrow, modifiers: [])
2. 缩略图视图
底部显示所有图片的缩略图,提供:
- 可视化的图片预览
- 快速跳转到任意图片
- 当前图片的高亮显示
3. 文件夹常驻与监控
使用 FileSystemEventStream 实现文件夹监控:
- 自动检测新增的图片文件
- 监控图片删除并更新列表
- 实时同步文件系统变化
class FolderMonitor {
private var eventStream: FSEventStreamRef?
func startMonitoring(path: String) {
// 监控文件夹变化
}
}
4. 图片缩放与拖拽
实现了手势支持:
- 捏合手势进行缩放
- 双指拖拽查看细节
- 自适应图片尺寸
5. 拖拽打开文件夹
支持直接拖拽文件夹到应用窗口:
.onDrop(of: [.fileURL], isTargeted: nil) { providers in
// 处理拖拽的文件夹
}
技术实现
架构设计
采用 MVVM(Model-View-ViewModel)架构:
ContentView (View)
↓
ImageModel (ViewModel)
↓
FolderMonitor (Service)
主要组件
- ContentView: 主界面,负责显示和交互
- ImageModel: 数据模型,管理图片列表和状态
- FolderMonitor: 文件夹监控服务
- ZoomableImageView: 可缩放的图片视图组件
性能优化
- 使用异步加载避免阻塞主线程
- 缩略图采用合适的压缩比例
- 仅加载可见区域的缩略图
支持的图片格式
应用支持常见的图片格式:
- JPEG / JPG
- PNG
- GIF
- BMP
- TIFF
- WebP
键盘快捷键
| 快捷键 | 功能 |
|---|---|
| ← / → | 切换上一张/下一张图片 |
| 空格 | 下一张图片 |
| Cmd+O | 打开文件夹 |
| Cmd+← / → | 快速切换图片 |
开发体会
使用 SwiftUI 开发这款应用的过程中,我深刻体会到:
- 声明式 UI 的优势: SwiftUI 让界面开发变得简洁直观
- 响应式编程: 通过
@State和@Published实现数据绑定 - 系统集成: 利用 macOS 原生 API 实现文件夹监控
未来计划
- 支持更多图片格式(RAW、HEIC 等)
- 添加简单的图片编辑功能
- 支持幻灯片播放
- 添加收藏夹功能
- 支持文件夹历史记录
总结
这款图片浏览器虽然功能简单,但有效解决了我在日常工作中的实际需求。通过 SwiftUI 的强大能力,整个开发过程非常流畅。如果你也有类似的需求,不妨试试开发一款属于自己的工具应用。
系统要求: macOS 15.1 或更高版本
开发语言: Swift / SwiftUI
架构模式: MVVM
感兴趣的朋友可以在评论区交流讨论!
GitHub 仓库: https://github.com/your-username/image-browser
下载地址: https://github.com/vychodlc/ImageBrowser/releases/tag/beta