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 鸿蒙系统开发实战-开发一个聊天技巧软件堪称聊天神器.目前鸿蒙系统可真是过了一把自主研发的瘾,通过一个鸿蒙程序开发实战教程来演示如何开发一款聊天神器,视频教程放在了 ...
最新文章
- 设计模式之美:Memento(备忘录)
- 百度地图API开发概述
- jetson nano 实现车牌识别
- vue 安装php,vue中使用openinstall
- MFC显示JPG,bmp图片
- python开源流程图软件_Dia
- 银行存款又加码?三年期利率4.96%,按月付息,值得存吗?
- django使用mysql 好处_Django使用MySQL
- centos启动提示unexpected inconsistency RUN fsck MANUALLY
- Linux 源码包软件安装操作与实战
- 硬件:Intel CPU发展史
- win10升级助手_Win7直接升级Win10,小编三种方法告诉你如何做到,建议收藏哦!
- vue 在线阅读PDF
- 石墨烯散热科技视频发布,华为Mate20系列将带来极致游戏体验
- 2019西工大计算机类排名,西北工业大学2019年排名第31位 较2018年上升1名
- abd获取手机应用的安装包
- 《web前端面试题》第一问-如何快速居中对齐?
- 2015湘潭邀请赛 Yada Number
- 【标准全文】GB 38031-2020 电动汽车用动力蓄电池安全要求
- Docker私服硬盘满问题