博主最近突发奇想想做一个自己的日记本App,在过程中遇到了一些坑,摸索了很久才做出一个简单的日记本功能。
先来看看一下效果吧:
先来说说这次用到的一些东西吧:
1、UIImagePickerController:用来获取Photos里面的照片
2、UITexeView:用来做图文混排
3、NSKeyedArchiver和NSKeyedUnarchiver:保存和读取数据
具体的一些细节在过程中讲解。
从照片选择图片
首先,我们要实现从用户的Photos(照片)这个应用中读取用户的照片。最简单的方法就是用UIImagePickerController,要使用它,需要类遵循UIImagePickerControllerDelegate和UINavigationControllerDelegate这两个协议。
在做图片选择功能时,博主将其封装为三个函数(其中两个是协议中的函数)
第一个函数如下:
/// 选择图片
@objc func pickImage() {
self.imagePickerController = UIImagePickerController()
//设置代理
self.imagePickerController.delegate = self
//允许用户对选择的图片或影片进行编辑
self.imagePickerController.allowsEditing = true
//设置image picker的用户界面
self.imagePickerController.sourceType = .photoLibrary
//设置图片选择控制器导航栏的背景颜色
self.imagePickerController.navigationBar.barTintColor = UIColor.orange
//设置图片选择控制器导航栏的标题颜色
self.imagePickerController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
//设置图片选择控制器导航栏中按钮的文字颜色
self.imagePickerController.navigationBar.tintColor = UIColor.white
//显示图片选择控制器
self.present(self.imagePickerController, animated: true, completion: nil)
}
这个函数中的东西都很简单,需要说的就只有一个那就是设置imagePickerController的sourceType,它的类型是UIImagePickerControllerSourceType的枚举,其中三个变量分别为photoLibrary(照片库)、camera(相机)、savedPhotosAlbum(保存的相册)。设置sourceType就是设置图片的来源,常用的为前两个。
然后就是两个协议中的方法了,一个是你选择了对应的图片
/// 图片选择完成
///
/// - Parameters:
/// - picker: 图片选择控制器
/// - info: 图片信息
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// print("media type: \(String(describing: info["UIImagePickerControllerMediaType"]))")
// print("crop rect: \(String(describing: info["UIImagePickerControllerCropRect"]))")
// print("reference url: \(String(describing: info["UIImagePickerControllerReferenceURL"]))")
//获取选择到的图片
let image = info["UIImagePickerControllerEditedImage"] as?