English · 中文
Monotone 是一个现代化的移动端应用程序,与 Unsplash 所提供的强大的 Unsplash API 所集成。实现了其大部分功能,使用它可以轻松地进行照片的浏览,搜索,收藏,以及个人中心,许可证,FAQ等查阅等功能。
这是一个 非官方 的应用程序,主要目的是发挥一些构想的可行性。
它主要由Swift进行编写,使用RxSwift进行数据驱动,基于SnapKit绘制可响应式的约束布局。
如果您喜欢这个项目,或者被这个项目所启发创意,请毫不犹豫地点上一颗小星星。(笔者狂喜)
- 纯代码编写的界面
- 深色模式支持
- 动画效果
- 本地化
- 由 Unsplash API 进行数据驱动
- 更多...
目前所支持的功能列表:
位置 | 模块 | 页面 | 样式布局 | 数据驱动 | 动画效果 | 本地化 |
---|---|---|---|---|---|---|
主要 | 登录 | 登录 & 注册 | ✅ | ✅ | ✅ | ✅ |
照片 | 列表(搜索 & 主题) | ✅ | ✅ | ✅ | ✅ | |
阅览 | ✅ | ✅ | ✅ | ✅ | ||
相机参数 | ✅ | ✅ | ✅ | ✅ | ||
收藏(添加 & 移除) | ✅ | ✅ | ✅ | ✅ | ||
分享至社交媒体 | ✅ | ⬜️ | ✅ | ✅ | ||
保存至相册 | ✅ | ✅ | ✅ | ✅ | ||
侧边栏 | 个人中心 | 详情 | ✅ | ✅ | ✅ | ✅ |
菜单 | 我的照片 | ✅ | ✅ | ✅ | ✅ | |
应募 | ✅ | ⬜️ | ✅ | ✅ | ||
许可条例 | ✅ | ✅ | ✅ | ✅ | ||
帮助 | ✅ | ⬜️ | ✅ | ✅ | ||
周边制作 | ✅ | ⬜️ | ✅ | ✅ | ||
底边栏 | 商店 | 首页 | ✅ | ⬜️ | ✅ | ✅ |
详情 | ✅ | ⬜️ | ✅ | ✅ | ||
壁纸 | 列表(按屏幕大小) | ✅ | ⬜️ | ✅ | ✅ | |
收藏 | 列表 | ✅ | ✅ | ✅ | ✅ | |
探索 | 列表(照片 & 收藏) | ✅ | ⬜️ | ✅ | ✅ |
本应用程序使用 Cocoapods
进行依赖项的管理。
请首先参照 Cocoapods官方网站 的指引进行安装配置(如果您已经安装 Cocoapods
,可以跳过这一步)。
Monotone 由 Unsplash API 进行数据驱动,为了使它正常运作,首先您需要申请一对OAuth密钥。
- 访问 Unsplash,注册并登录(如果您有已登录的账号,可以跳过这一步);
- 访问 Unsplash应用程序注册平台 同意条款并新建一个APP项目,表单中的名字(Application Name)与描述(Description)可以随意填写;
- 在APP建立完成后,会自动跳转到APP详情页(您也可以在 https://unsplash.com/oauth/applications 中找到它)。在页面下方的
Redirect URI & Permissions - Redirect URI
中填写monotone://unsplash
,并勾选相应许可,如下图所示,并保存;
- 完成以上工作后,记录页面中的”Access Key“与”Secret Key“,稍后会用到这对密钥。
请通过以下步骤进行安装。
- 在终端执行如下命令:
# 克隆到本地
git clone https://github.com/Neko3000/Monotone.git
# 定位到工程目录内
cd Monotone
# 安装组件
pod install
- 在 Monotone 根目录下拷贝一份名为
config_debug.json
的文件,并把它重命名为config.json
(这个文件被.gitignore所忽略); - 打开
config.json
,填写您的”Access Key“与”Secret Key“,在运行时它们将会自动被拷贝至APP目录(具体请参考 Project->Build Phases->Run Script 以及 APPCredential.swift 内的内容); - 完成,command + R。
项目 | 简述 |
---|---|
RxSwift | 响应式异步编程的框架。 |
Action | 基于RxSwift,进一步封装Action来进行调用。 |
DataSources | 基于RxSwift,扩展TableView和CollectionView的业务逻辑交互。 |
Alamofire | HTTP网络库。 |
SwiftyJSON | 高效的处理JSON数据格式。 |
ObjectMapper | 完成Model与JSON之间的映射。 |
Kingfisher | 网络图片缓存与多种附加功能。 |
SnapKit | 高效的约束布局。 |
... | ... |
更多依赖项,请查看 Podfile。
基本的工程结构文件树如下。
Monotone
├── Monotone
│ ├── /Vars #全局变量
│ ├── /Enums #枚举声明(包括了一些非真实数据)
│ ├── /Application
│ │ ├── AppCredential #授权凭证
│ │ ...
│ │ └── UserManager #用户管理
│ ├── /Utils #工具
│ │ ├── /BlurHash #照片加载模糊效果
│ │ ├── ColorPalette #全局颜色
│ │ ├── AnimatorTrigger #动画效果
│ │ └── MessageCenter #通知栏
│ │── /Extension #扩展
│ │── /Services #服务
│ │ ├── /Authentication #授权相关请求
│ │ └── /Network #数据相关请求
│ │── /Components #视图类
│ │── /ViewModels #视图模型类
│ │── /ViewControllers #视图控制器类
│ │── /Models #数据模型类
│ │── /Coordinators #页面跳转
│ └── /Resource #资源文件
└── Pods
您所看到界面布局均由 Addie Design Co 进行设计,并在互联网上免费共享了 这一份文稿。不管是设计元素,还是完成度都是值得令人惊叹的。
可以说没有这份免费共享的设计文稿,就没有这个应用程序的编写过程。
感谢 Addie Design Co 所提供的这份漂亮的设计文稿。
Unsplash 是一个拥有较为自由的著作权许可条款的免费照片共享网站,具有非常高的质量。摄影师可以将照片上传,照片编辑者们会对用户上传的照片进行整理并归纳。
也是笔者本人非常钟爱的一个高质量照片网站,非常推崇这种富有艺术感的共享精神。
笔者的主页在 这里(但是自从2020年初以后就懒得外出摄影)。
受限于 Unsplash API 所提供的数据,该应用程序中的一部分页面仅完成了样式布局,并没有使用真实数据(集中于商店,探索等模块),后续如果API提供了这些内容的数据源,也会第一时间添加新的功能。
同时,针对已经完成的该应用程序,也会持续性的改进一些内容。
如果您对移动端应用程序的编写具有一定经验,并且想要改进这个应用程序,非常欢迎您参与这个开源项目。发挥您的构想,改进甚至重构这个应用程序。
您可以遵循标准步骤:
Fork
这个仓库;- 创建您的
Branch
(git checkout -b feature/AmazingFeature
); - 创建
Commit
(git commit -m 'Add some AmazingFeature'
); Push
到远程Branch
(git push origin feature/AmazingFeature
);- 打开一个
Pull Request
。
欢迎任何开发者对本项目提出Issue或者PRs。
电子邮件: [email protected]
Blog: chienerrant.com
微博: @一只妖艳的绀色布
本应用程序项目基于 MIT许可证 进行分发。 查看 MIT许可证 来获取更多细节。