iOS项目开发实战——开发基于Handoff的App(Swift)
iOS8推出一个新特性,叫做Handoff。Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行。这个在iOS8和Yosemite得到支持,当然在iOS9和EI Captain中也有这个功能。
Handoff中使用了一个“活动”的概念,它可以在多台设备间传递用户的“活动”。当用户从一台设备切换到另一台设备后,用户完全可以不中断原有的“活动”,也不需要重新配置应用程序。在这个过程中,Handoff将自动在iOS设备和Mac间保持应用程序的同步。
本应用实现了在两台iOS设备之间的协同工作。当在一台iOS设备上运行该应用时,打开另一台安装该应用的iPhone,可以快速看到同样的显示内容。可以快速实现多台设备的同步,提高了工作效率。这里我将通过Swift来实现。项目我已经上传 https://github.com/chenyufeng1991/Handoff 。
(1)创建一个iOS项目,首先在Info.plist文件中加入一个字段,NSUserActivityTypes,值可以任意,但是要唯一,我这里是:com.chenyufengweb.HandoffDemo.sync。到时候我会在代码中用到。
(2)在AppDelegate.swift中实现一个方法如下:
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {print("AppDelegate -- continueUserActivity")let topViewController = self.window?.rootViewController as! AnyObjectrestorationHandler([topViewController])return true}
(3)在ViewController.swift中实现如下:
import UIKitclass ViewController: UIViewController,NSUserActivityDelegate {@IBOutlet weak var textField: UITextField!@IBOutlet weak var switchButton: UISwitch!var str:String!var isOn:String!override func viewDidLoad() {super.viewDidLoad()let myActivity:NSUserActivity! = NSUserActivity(activityType: "com.chenyufengweb.HandoffDemo.sync")str = textField.textisOn = switchButton.on ? "on" : "off"//定义一个字典;let items = ["text":str,"switch":isOn]//配置活动参数;myActivity.userInfo = itemsmyActivity.title = "sync"myActivity.becomeCurrent()myActivity.delegate = selfmyActivity.needsSave = trueself.userActivity = myActivity//以代码的方式进行消息响应;// self.textField.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.ValueChanged)// self.switchButton.addTarget(self, action: "onChanged", forControlEvents: UIControlEvents.ValueChanged)}func textFieldDidChange() -> Void{print("Text changed")self.userActivity?.becomeCurrent()self.userActivity?.needsSave = true}func onChanged() -> Void{print("Switch changed")self.userActivity?.becomeCurrent()self.userActivity?.needsSave = true}//以segue的方式进行控件响应,个人比较喜欢;@IBAction func textFieldDidChange(sender: AnyObject) {print("Text changed")self.userActivity?.becomeCurrent()self.userActivity?.needsSave = true}@IBAction func onChanged(sender: AnyObject) {print("Switch changed")self.userActivity?.becomeCurrent()self.userActivity?.needsSave = true}//MARK: - Handoff/*注意:userActivityWillSave()方法和userActivityWasContinued()这两个方法在当前进行操作的设备A上执行;restoreUserActivityState()方法在打开另一个设备B上执行;*///把当前的数据存储到字典中;func userActivityWillSave(userActivity: NSUserActivity) {print("ViewController userActivityWillSave")str = textField.textisOn = switchButton.on ? "on" : "off"let items = ["text" : str,"switch" : isOn]userActivity.addUserInfoEntriesFromDictionary(items)print("userActivityWillSave:\(str), \(isOn)")}func userActivityWasContinued(userActivity: NSUserActivity) {print("ViewController userActivityWasContinued")
//
// let dictionary:NSDictionary = (userActivity.userInfo)!
// let textForKey = dictionary.objectForKey("text") as! String
// let switchForKey = dictionary.objectForKey("switch") as! String
// print("text = \(textForKey),switch = \(switchForKey)")
// }//从字典中读出数据;override func restoreUserActivityState(activity: NSUserActivity) {print("ViewCOntroller restoreUserActivityState")let dictionary:NSDictionary = (activity.userInfo)!let textForKey = dictionary.objectForKey("text") as! Stringlet switchForKey = dictionary.objectForKey("switch") as! Stringprint("text = \(textForKey),switch = \(switchForKey)")self.textField.text = textForKeyif (switchForKey == "on"){self.switchButton.on = trueprint("ononononon")}else{self.switchButton.on = falseprint("offoffoffoffoff")}}}
(4)运行效果如下:
。
。
。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
iOS项目开发实战——开发基于Handoff的App(Swift)相关推荐
- Vue.js 3.0企业级管理后台开发实战:基于Element Plus UI
Vue.js 3.0企业级管理后台开发实战:基于Element Plus UI - 每天更新 前言 文章内容 项目源码及课件 第1章 项目启动 1.1 项目原型 1.2 项目UI 1.3 项目开发流程 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记
2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...
- 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记
2018年11月,经过熬夜写作的<Android Studio开发实战 从零基础到App上线(第2版)>正式出版面世.承蒙众多读者的厚爱,第2版的图书在此后的三年多时间,一直保持在移动开发 ...
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...
- 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...
- 《Android Studio 开发实战从零基础到App上线》笔记1
<Android Studio 开发实战从零基础到App上线>笔记1 前言 在吉林大学Android studio实践的课程上,因为时间有限,教授教授地很不细致,主要讲了初级控件和中级控件 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...
- 《Android Studio开发实战 从零基础到App上线(第3版)》资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线(第3版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为Android Stud ...
- 《Android Studio开发实战 从零基础到App上线》本书内容问题答疑
1.关于学习本书之前是否需要Java基础 问题:看安卓开发教程书需要很扎实的java基础吗? 回答:本书的零基础指的是安卓零基础,不是Java零基础,所以看本书之前需要一定的Java基础,基本的变量声 ...
- 鸿蒙系统开发实战-开发一个聊天技巧软件堪称聊天神器
鸿蒙开发实战-开发一个聊天助手APP 鸿蒙系统开发实战-开发一个聊天技巧软件堪称聊天神器.目前鸿蒙系统可真是过了一把自主研发的瘾,通过一个鸿蒙程序开发实战教程来演示如何开发一款聊天神器,视频教程放在了 ...
最新文章
- 两个晶体管组成的混沌电路
- html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求
- android面向数据库的的编程工具-OrmLite
- CSS 中的定位:relative,absolute
- 基于深度学习的FAQ问答系统
- 最新CSS Hack汇总快查
- 设计模式学习笔记——访问者(Visitor)模式
- 保存div与页面滚动条的位置
- vim python补全_转:VIM python 自动补全插件:pydiction
- 16个常用的Linux服务器监控命令
- .net 调用css/javascipt出现的问题及解决
- 复变函数:傅里叶级数
- Ace Admin前端框架笔记二导航栏Navba
- python snownlp了解_分享python snownlp的实例教程
- IT/互联网:盘点 2020 年收入最高的10大 IT 职位!你差多少?
- 海底捞无人餐厅上线,万人失业潮又要到来?
- 常用vi编辑器命令行
- 网上舆情分析报告写作框架及六大技巧
- 你在小时候玩过哪些「恶心」的游戏?
- 权限设计,设计模型分析(DAC,MAC,RBAC,ABAC) 之 RBAC