From c7b055ee718d66f7c39f4f03d5f440c5bdcb428f Mon Sep 17 00:00:00 2001 From: Sam Davies Date: Mon, 24 Nov 2014 14:41:31 +0000 Subject: [PATCH] Wired the activity continuation code in, it all works spiffingly well The region is extracted from the activity and the map updated to display it as appropriate. Ready for writeup --- 38-handoff/MapOff/MapOff/AppDelegate.swift | 4 +++- 38-handoff/MapOff/MapOff/ViewController.swift | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/38-handoff/MapOff/MapOff/AppDelegate.swift b/38-handoff/MapOff/MapOff/AppDelegate.swift index 5672724..009f131 100644 --- a/38-handoff/MapOff/MapOff/AppDelegate.swift +++ b/38-handoff/MapOff/MapOff/AppDelegate.swift @@ -32,7 +32,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool { - println("Continuing...") + if let rootVC = window?.rootViewController { + restorationHandler([rootVC]) + } return true } diff --git a/38-handoff/MapOff/MapOff/ViewController.swift b/38-handoff/MapOff/MapOff/ViewController.swift index 303e282..f71968a 100644 --- a/38-handoff/MapOff/MapOff/ViewController.swift +++ b/38-handoff/MapOff/MapOff/ViewController.swift @@ -20,11 +20,12 @@ import MapKit class ViewController: UIViewController, MKMapViewDelegate { @IBOutlet weak var mapView: MKMapView! + let activityType = "com.shinobicontrols.MapOff.viewport" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. - let activityType = "com.shinobicontrols.MapOff.viewport" + if userActivity?.activityType != activityType { userActivity?.invalidate() userActivity = NSUserActivity(activityType: activityType) @@ -34,11 +35,24 @@ class ViewController: UIViewController, MKMapViewDelegate { mapView.delegate = self } + // MARK:- UIResponder Activity Handling override func updateUserActivityState(activity: NSUserActivity) { let regionData = NSData(bytes: &mapView.region, length: sizeof(MKCoordinateRegion)) activity.userInfo = ["region" : regionData] } + override func restoreUserActivityState(activity: NSUserActivity) { + if activity.activityType == activityType { + // Extract the data + let regionData = activity.userInfo!["region"] as NSData + // Need an empty coordinate region to populate + var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0), + span: MKCoordinateSpan(latitudeDelta: 0.0, longitudeDelta: 0.0)) + regionData.getBytes(®ion, length: sizeof(MKCoordinateRegion)) + mapView.setRegion(region, animated: true) + } + } + // MARK:- MKMapViewDelegate func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool) { userActivity?.needsSave = true