这个世界会好的

打造一款 macOS 图片浏览器:解决系统预览的痛点

Published on
by
  • avatarVychod

应用预览

应用预览

为什么需要这款应用?

作为一名开发者,我经常需要浏览大量的设计稿、截图和素材图片。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)

主要组件

  1. ContentView: 主界面,负责显示和交互
  2. ImageModel: 数据模型,管理图片列表和状态
  3. FolderMonitor: 文件夹监控服务
  4. ZoomableImageView: 可缩放的图片视图组件

性能优化

  • 使用异步加载避免阻塞主线程
  • 缩略图采用合适的压缩比例
  • 仅加载可见区域的缩略图

支持的图片格式

应用支持常见的图片格式:

  • JPEG / JPG
  • PNG
  • GIF
  • BMP
  • TIFF
  • WebP

键盘快捷键

快捷键功能
← / →切换上一张/下一张图片
空格下一张图片
Cmd+O打开文件夹
Cmd+← / →快速切换图片

开发体会

使用 SwiftUI 开发这款应用的过程中,我深刻体会到:

  1. 声明式 UI 的优势: SwiftUI 让界面开发变得简洁直观
  2. 响应式编程: 通过 @State@Published 实现数据绑定
  3. 系统集成: 利用 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