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

热门文章

  1. 工作邦智慧水务表务系统
  2. 变频器恒压供水ABB变频器恒压供水触摸屏通讯程序
  3. mysql 乘_mysql乘法
  4. C语言模拟双色球系统开发
  5. Android 快速集成指南 - ShareSDK Wik
  6. SoftRender学习笔记
  7. 你猜!大学里青年教师待遇真的很低吗?
  8. Spark之提高并行度
  9. 质量管理、人力资源管理
  10. 华大单片机 HC32F460 调试管脚 SWCLK SWDIO PA15 PB3 PB4引脚复用问题