多任务
在应用挂起状态下,如果其他内存紧张,会被系统系统直接杀掉。
解决办法:
当应用程序内存小于16M的时候,应用程序挂起的时候,系统会将应用程序的内存存储到闪存中。 所以16M是个关键点
后台执行:
1 进入后台执行扫尾操作
var backgroundTask :UIBackgroundTaskIdentifier! = nil
backgroundTask = application.beginBackgroundTask {
//超时 处理
application.endBackgroundTask(backgroundTask)
backgroundTask = UIBackgroundTaskInvalid
}
当你调用 application.beginBackgroundTask
的时候,系统就会给你10分钟的时间,来让你完成扫尾工作。
然后就可以在下面进行一些时长的的工作 例如下载什么的
2 进入后台定期执行任务(麻蛋 坑比)
首先告诉 系统多长时间执行一次
UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
系统默认从不执行
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("11111")
completionHandler(UIBackgroundFetchResult.newData)
}
然后在代理方法中执行任务。
这个东西 真是坑的不行。贼不好用
具体看着https://www.v2ex.com/t/90479
3 通知触发后台任务
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
///--
}
绘制
override func draw(_ rect: CGRect)
当系统需要显示一个视图的时候。则调用draw方法
参数:需要更新的矩形的区域
选择绘制的颜色
//填充颜色
UIColor.green.setFill()
//边界颜色
UIColor.green.setStroke()
当要当前操作不污染 当前上下文 例如阴影填充颜色 等等
可以保存上下文状态
CGContextSaveGState(context)
//进行一些操作
CGContextRestoreGState(context)
UIBezier类 不仅可以绘制贝塞尔曲线 还可以绘制自定义图形
addline()
addCurve()
---
音视频
音频操作对象类
AVFounction - AVPlayer
AVKit -AVPlayerViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "videoSegue" {
let urlStr = Bundle.main.url(forResource: "11", withExtension: "mp4");
let vc: AVPlayerViewController = segue.destination as! AVPlayerViewController
vc.player = AVPlayer(url: urlStr!)
}
}
具体操作都在AVPlayer对象方法中,使用AVPlayerViewController 系统都在自己实现。 自定义可使用AVPlayerLayer播放
相册操作类
UIImagePickerController
@IBAction func imageAction(_ sender: Any) {
let imagePick = UIImagePickerController()
imagePick.sourceType = .photoLibrary
imagePick.delegate = self
imagePick.allowsEditing = true
present(imagePick, animated: true, completion: nil)
}
// MARK: delegate
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let orginImage = info[UIImagePickerControllerOriginalImage]
let aa = info[UIImagePickerControllerEditedImage]
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}