SwiftUI:获取应用进入后台的通知
SwiftUI可以检测您的应用何时移至后台(即用户何时返回主屏幕),何时回到前台,用户何时截取屏幕截图等等。这些全部由 Notification Center 提供支持,Notification Center 是 Apple 内部消息系统的API名称,该API使系统可以在事件发生时通知我们,还可以使我们在代码的不同部分之间发布消息。
Notification Center 是来自 Apple 的 Foundation 框架的另一个功能,在 SwiftUI 中,我们可以使用 Combine 监视其事件,因此,实际上这是 Apple的三个框架共同协作,为我们提供了出色的功能。
例如,当您的应用开始移至后台时,通知中心会发布一条名为UIApplication.willResignActiveNotification
的消息,这使我们有机会暂停任何不重要的工作,保存数据等等。要使用它,我们需要让 Notification Center 为该通知创建一个发布者,然后附加我们想要的任何工作。我们会收到作为闭包参数的实际消息,但是大多数时候您可以忽略此消息。
因此,请尝试以下操作在用户离开您的应用程序时打印出一条消息:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willResignActiveNotification)) { _ in
print("Moving to the background!")
}
我们可以收听很多此类通知,它们的工作方式完全相同。例如,willResignActiveNotification
的反义是willEnterForegroundNotification
,当用户重新激活您的应用程序并有机会继续进行任何重要工作时会调用该方法:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
print("Moving back to the foreground!")
}
您甚至可以使用userDidTakeScreenshotNotification
检测用户何时拍摄了屏幕截图:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification)) { _ in
print("User took a screenshot!")
}
这些内容太多了,因此我无法在此处列出所有内容,因此可以再尝试一下以下列出两种方法:
- 当用户更改时钟或夏时制更改时,将调用
UIApplication.significantTimeChangeNotification
。 - 显示键盘时,将调用
UIResponder.keyboardDidShowNotification
。
这些通知中的每一个都以完全相同的方式工作:使用onReceive()
捕获来自发布者的通知,然后执行所需的任何操作。
也可以自己发送通知:
NotificationCenter.default.post(
name: NSNotification.Name(rawValue: "your post name"),
object: nil,
userInfo: ["data":"data1"]
)
然后自己监听:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: NSNotification.Name(rawValue: "your post name"))) { noti in
print("Get myself notification!")
}
译自 How to be notified when your SwiftUI app moves to the background
- 高仿今日头条
- Web打印组件jatoolsPrinter
- Android-Universal-Image-Loader图片异步加载并缓存
- RESTful API 设计最佳实践
- Hello Bonjour!
- SQL Server 2008 FILESTREAM特性管理文件
- 验证码类库CaptchaMvc
- SQL Server : Browser服务
- 仿今日头条顶部导航效果
- iOS微信小视频优化心得
- ADO.NET Entity Framework CodeFirst 如何输出日志(EF 5.0)
- 仿火车出票效果
- ASP.NET SignalR HubPipelineModule
- 微信ANDROID客户端-会话速度提升70%的背后
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mybatis接口Mapper内的方法为啥不能重载?
- 基于K-Means聚类算法的主颜色提取
- 扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization层
- 一个真实问题,搞定三个冷门pandas函数
- conda管理C源代码程序的时候总是出现库文件冲突或者缺失
- 如何获取非模式生物KEGG PATHWAY的基因集并用clusterProfile做GSEA?
- 通过视频着色进行自监督跟踪
- Python爬虫:一些常用的爬虫技巧总结
- 带你用 Python 实现自动化群控(入门篇)
- Chrome终于上线这项重磅功能,中国用户苦等多年!
- YOLO 算法最全综述:从 YOLOv1 到 YOLOv5
- 《JavaScript ES6 函数式编程入门经典》读书笔记
- Java9-Reactive Stream API响应式编程
- mybatis-plus增删改查以及前后端分离模式下的项目应用
- docker(常用软件安装)