Model Segue
它是Segue的一种,它会拿下整个屏幕的控制权。开始时并没有什么特殊的,选择种类并准备即可,返回时则需要调用:
presentingViewController?.dismissViewControllerAnimated(true, completion: nil)这里的presentingViewController指的是呈现当前View的View,如果当前View还呈现了其他View,则会一同消失。
如果你使用Unwind方法跳转则不需要调用这个方法。
Camera
使用UIImagePickerController,这是UInavigationController的子类。首先还是要查询对应的资源是否可用,picker的可用资源有相册和相机。然后要设置要获取的媒体类型,视频或图像,kUTTypeImage,这个值来自于一个叫MobileCoreServices的古老的包,要记得引。接下来设置代理为自己。这里要注意的是,代理类不仅要声明实现UIImagePickerControllerDelegate,还要声明实现UINavigationControllerDelegate
if UIImagePickerController.isSourceTypeAvailable(.Camera) { let picker = UIImagePickerController() picker.sourceType = .Camera picker.mediaTypes = [kUTTypeImage] picker.delegate = self picker.allowsEditing = true presentViewController(picker, animated: true, completion: nil) }接下来实现代理方法:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { var image = info[UIImagePickerControllerEditedImage] as? UIImage if image == nil { image = info[UIImagePickerControllerOriginalImage] as? UIImage } imageView.image = image makeRoomForImage() dismissViewControllerAnimated(true, completion: nil) } func imagePickerControllerDidCancel(picker: UIImagePickerController) { dismissViewControllerAnimated(true, completion: nil) }
ALAssetsLibrary:
这个可以帮助你把拍到的超片存到相册。
Persistence(将数据永久的储存在闪存中):
Archiving:比较少用的方式,不过StoryBoard就是这么储存的。
SQLite:以数据库的方式储存
File System:每个应用有一个自己的沙盒,你的应用可以访问的文件都在这个沙盒里,具体每个文件夹你有什么权限,你可以查阅NSSearchPathDirectory。使用NSFileManager来访问FileSystem,它是线程安全的,只要你不在这个线程初始化,却在另一个线程使用就行。有一个默认的NSFileManager对象,这个只能在主线程使用,在其他线程使用则需要在那个线程里新建。
//获取fileManager let fileManager = NSFileManager() //得到根目录URL if let docsDir = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as? NSURL { //通过唯一的时间来得到唯一的文件名 let uniqueFileName = NSDate.timeIntervalSinceReferenceDate() //在根URL后添加文件相对路径 let url = docsDir.URLByAppendingPathComponent("\(uniqueFileName).jpg") //写数据到这个URL,atomically的意思是原子性:写入文件后,将原文件替换,再删除原文件,这样保证文件系统里的文件都是完整的 if imageData.writeToURL(url, atomically: true) { pointEditable?.smallImageURL = url pointEditable?.bigImageURL = url } }
resourceValuesForKeys可以获得文件的创建时间之类的属性,传入不同的Key即可。
Core Data:这个很重要,有空好好研究研究。