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)相关推荐

  1. Vue.js 3.0企业级管理后台开发实战:基于Element Plus UI

    Vue.js 3.0企业级管理后台开发实战:基于Element Plus UI - 每天更新 前言 文章内容 项目源码及课件 第1章 项目启动 1.1 项目原型 1.2 项目UI 1.3 项目开发流程 ...

  2. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  3. 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记

    2018年11月,经过熬夜写作的<Android Studio开发实战 从零基础到App上线(第2版)>正式出版面世.承蒙众多读者的厚爱,第2版的图书在此后的三年多时间,一直保持在移动开发 ...

  4. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  5. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...

  6. 《Android Studio 开发实战从零基础到App上线》笔记1

    <Android Studio 开发实战从零基础到App上线>笔记1 前言 在吉林大学Android studio实践的课程上,因为时间有限,教授教授地很不细致,主要讲了初级控件和中级控件 ...

  7. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  8. 《Android Studio开发实战 从零基础到App上线(第3版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第3版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为Android Stud ...

  9. 《Android Studio开发实战 从零基础到App上线》本书内容问题答疑

    1.关于学习本书之前是否需要Java基础 问题:看安卓开发教程书需要很扎实的java基础吗? 回答:本书的零基础指的是安卓零基础,不是Java零基础,所以看本书之前需要一定的Java基础,基本的变量声 ...

  10. 鸿蒙系统开发实战-开发一个聊天技巧软件堪称聊天神器

    鸿蒙开发实战-开发一个聊天助手APP 鸿蒙系统开发实战-开发一个聊天技巧软件堪称聊天神器.目前鸿蒙系统可真是过了一把自主研发的瘾,通过一个鸿蒙程序开发实战教程来演示如何开发一款聊天神器,视频教程放在了 ...

最新文章

  1. 两个晶体管组成的混沌电路
  2. html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求
  3. android面向数据库的的编程工具-OrmLite
  4. CSS 中的定位:relative,absolute
  5. 基于深度学习的FAQ问答系统
  6. 最新CSS Hack汇总快查
  7. 设计模式学习笔记——访问者(Visitor)模式
  8. 保存div与页面滚动条的位置
  9. vim python补全_转:VIM python 自动补全插件:pydiction
  10. 16个常用的Linux服务器监控命令
  11. .net 调用css/javascipt出现的问题及解决
  12. 复变函数:傅里叶级数
  13. Ace Admin前端框架笔记二导航栏Navba
  14. python snownlp了解_分享python snownlp的实例教程
  15. IT/互联网:盘点 2020 年收入最高的10大 IT 职位!你差多少?
  16. 海底捞无人餐厅上线,万人失业潮又要到来?
  17. 常用vi编辑器命令行
  18. 网上舆情分析报告写作框架及六大技巧
  19. 你在小时候玩过哪些「恶心」的游戏?
  20. 权限设计,设计模型分析(DAC,MAC,RBAC,ABAC) 之 RBAC

热门文章

  1. win11怎么在桌面上添加便签
  2. 多功能视频处理器——MS1824
  3. 华为HCIP的含金量和前景
  4. 【NOIP2017】时间复杂度
  5. 如何查看cudnn当前版本_Linux上查看已安装的CUDA和cuDNN版本号
  6. 51单片机静态八位数码管显示
  7. 深入浅出Transformer(一)
  8. CMIP6中如何进行SWAT、Biome-BGC模型数据处理
  9. Android开源项目大全 - 视图View类
  10. 跳槽涨薪 50%,却遇到一个怂货领导!