首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >为什么 iPhone 自带图书 App 不支持音量键翻页?我写了一个开源解决方案

为什么 iPhone 自带图书 App 不支持音量键翻页?我写了一个开源解决方案

原创
作者头像
用户12630820
发布2026-07-16 17:44:07
发布2026-07-16 17:44:07
290
举报

问题的起点

如果你用过 iPhone 自带的"图书"App,或者微信读书、网易蜗牛等主流阅读器,你可能注意到一件事——

**这些 App 没有一个能让你用手机侧边的音量键来翻页。**

而这件事在 Android / 鸿蒙 / 其他系统上,几乎是阅读器的标配。

原因很简单:苹果没有开放音量键翻页的系统级 API。开发者没法像调用系统相机那样,直接唤起一个翻页行为。音量键的底层事件被系统拦截并用于调节音量,第三方 App 拿不到对应的回调。

这对大多数人来说不是什么大事。但如果你和我一样,喜欢窝在被窝里、侧躺着单手拿手机看书,每翻一页都要伸手指去戳屏幕右侧——体验确实很糟。

我做了什么

我花了一段时间,用 SwiftUI + WKWebView 实现了一款 iOS EPUB 阅读器:

阅读器界面展示
阅读器界面展示
阅读器界面展示
阅读器界面展示
音量键翻页效果展示
音量键翻页效果展示

SwiftBook

  • 完全开源(MIT)
  • 最小支持 iOS 16.0
  • UI 仿 Apple Books,交互逻辑尽量贴合原生体验

核心特性

音量键翻页

通过 KVO 监听 AVAudioSession.outputVolume,结合静音音频循环播放来保持音频会话活跃,间接捕获音量键事件。同时用 MPVolumeView 抑制系统音量 HUD,并把音量复位到固定基准值,确保上下按键始终能触发变化量。

这个方法不算优雅(苹果没给正经 API),但经过真机实测,稳定可用。音量+ → 上一页,音量- → 下一页,系统音量不会被改变。

CSS 多栏分页

整本书的 spine 章节拼成单个 HTML,通过 CSS column-width 实现分页。翻页由 JS 控制 container.scrollLeft,而不是依赖 WKWebView 的原生滚动——这避免了手势冲突,也让翻页行为完全可预测。

中文字体

iOS 只内置了苹方一种中文字体。项目通过 Git LFS 打包了开源的思源宋体(Source Han Serif SC,OFL 协议),提供 Regular / SemiBold / Bold 三个字重。想用宋体读中文书的人不用自己折腾字体文件。

其他功能:四种阅读主题(白/暖黄/暗黑/护眼绿)、字号/行距/页边距/对齐自由调节、EPUB 目录跳转、断点续读。

目前的功能覆盖

功能

状态

EPUB 导入(文件 App → .epub)

分页翻页(点击/滑动/进度条)

音量键翻页(真机验证)

字号/字体/主题/行距/页边距

断点续读(进度持久化)

EPUB 内嵌图片/封面渲染

目录跳转

✅(部分 EPUB 目录解析不完美)

书签/笔记/全文搜索/TTS

暂未实现


如何安装

项目目前没有上架 App Store(个人开发者年费 99 美元/年,暂时没付)。

安装方式:**需要一台 Mac**,将项目 Clone 到本地 → Xcode 打开工程 → 连接 iPhone → 选自己的 Apple ID 签名 → 运行到真机。

代码语言:bash
复制
git clone git@github.com:KevinLeeeee323/SwiftBookApp.git
cd SwiftBookApp
open SwiftBook/SwiftBook.xcodeproj

中文字体使用了 Git LFS 管理(思源宋体约 75MB),如需该字体执行 git lfs pull;不需要可跳过,苹方仍可正常使用。

详细步骤见项目 README

写在最后

这是我第一次完整地从零写一个 iOS App 并开源出来。代码有不少可以优化的地方(WKWebView 与 SwiftUI 的桥接、CSS 分页在超大 EPUB 上的性能等),但核心体验已经可以日常使用了。

如果你也是"躺着看书党",或者对 iOS WebView 分页 / 音量键 Hack 的实现感兴趣,欢迎:

  • 去 GitHub 点个 ⭐️
  • Fork 或提 Issue
  • 推荐给同样受"戳屏幕翻页"困扰的朋友

🔗 GitHub:https://github.com/KevinLeeeee323/SwiftBookApp

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题的起点
  • 我做了什么
    • SwiftBook
    • 核心特性
      • 音量键翻页
      • CSS 多栏分页
      • 中文字体
    • 目前的功能覆盖
  • 如何安装
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档