summaryrefslogtreecommitdiff
path: root/ios
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2015-07-30 15:34:49 -0700
committerJustin R. Miller <incanus@codesorcery.net>2015-09-07 09:22:52 -0700
commit0a172a21fdc2a87473560fd7d45f4d495d95de91 (patch)
treee4b0ccd7ee2fecdfe63ead975cbb646493ff2bb4 /ios
parent584c36f348d586bd07d27e6a4c9a7f318a98044c (diff)
downloadqtlocation-mapboxgl-0a172a21fdc2a87473560fd7d45f4d495d95de91.tar.gz
CameraOptions
Plumbed camera options all the way through to MGLMapView. Added a method that lets you specify a direction in addition to center point and zoom level. Added Map::jumpTo() for parity with mapbox-gl-js. Replaced usage of Map::setLatLng() and Map::setLatLngZoom() with Map::jumpTo() or Map::easeTo() within MGLMapView. Replaced MGLMapView.pitch with MGLMapCamera for setting all supported degrees of freedom simultaneously. Simultaneously move and rotate with course. Support customizable timing functions on iOS. iosapp now persists an archived MGLMapCamera instead of separate viewpoint properties and also synchronizes user defaults on termination. This change implements persistence entirely in Objective-C, eliminating the use of the Objective-C++ implementation. Fixes #1643, fixes #1834. Ref #1581.
Diffstat (limited to 'ios')
-rw-r--r--ios/app/MBXViewController.mm68
-rw-r--r--ios/app/mapboxgl-app.gypi1
2 files changed, 39 insertions, 30 deletions
diff --git a/ios/app/MBXViewController.mm b/ios/app/MBXViewController.mm
index af25fa4dc5..b323717702 100644
--- a/ios/app/MBXViewController.mm
+++ b/ios/app/MBXViewController.mm
@@ -2,8 +2,6 @@
#import <mbgl/ios/Mapbox.h>
-#import <mbgl/platform/darwin/settings_nsuserdefaults.hpp>
-
#import <CoreLocation/CoreLocation.h>
static UIColor *const kTintColor = [UIColor colorWithRed:0.120 green:0.550 blue:0.670 alpha:1.000];
@@ -26,10 +24,20 @@ static NSUInteger const kStyleVersion = 8;
@implementation MBXViewController
-mbgl::Settings_NSUserDefaults *settings = nullptr;
-
#pragma mark - Setup
++ (void)initialize
+{
+ if (self == [MBXViewController class])
+ {
+ [[NSUserDefaults standardUserDefaults] registerDefaults:@{
+ @"userTrackingMode": @(MGLUserTrackingModeNone),
+ @"showsUserLocation": @NO,
+ @"debug": @NO,
+ }];
+ }
+}
+
- (id)init
{
self = [super init];
@@ -38,6 +46,7 @@ mbgl::Settings_NSUserDefaults *settings = nullptr;
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveState:) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(restoreState:) name:UIApplicationWillEnterForegroundNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveState:) name:UIApplicationWillTerminateNotification object:nil];
}
return self;
@@ -73,7 +82,6 @@ mbgl::Settings_NSUserDefaults *settings = nullptr;
target:self
action:@selector(locateUser)];
- settings = new mbgl::Settings_NSUserDefaults();
[self restoreState:nil];
if ( ! settings->showsUserLocation)
@@ -86,30 +94,37 @@ mbgl::Settings_NSUserDefaults *settings = nullptr;
- (void)saveState:(__unused NSNotification *)notification
{
- if (self.mapView && settings)
+ if (self.mapView)
{
- settings->longitude = self.mapView.centerCoordinate.longitude;
- settings->latitude = self.mapView.centerCoordinate.latitude;
- settings->zoom = self.mapView.zoomLevel;
- settings->bearing = self.mapView.direction;
- settings->pitch = self.mapView.pitch;
- settings->debug = self.mapView.isDebugActive;
- settings->userTrackingMode = self.mapView.userTrackingMode;
- settings->showsUserLocation = self.mapView.showsUserLocation;
- settings->save();
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSData *archivedCamera = [NSKeyedArchiver archivedDataWithRootObject:self.mapView.camera];
+ [defaults setObject:archivedCamera forKey:@"camera"];
+ [defaults setInteger:self.mapView.userTrackingMode forKey:@"userTrackingMode"];
+ [defaults setBool:self.mapView.showsUserLocation forKey:@"showsUserLocation"];
+ [defaults setBool:self.mapView.debugActive forKey:@"debug"];
+ [defaults synchronize];
}
}
- (void)restoreState:(__unused NSNotification *)notification
{
- if (self.mapView && settings) {
- settings->load();
- [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(settings->latitude, settings->longitude) zoomLevel:settings->zoom animated:NO];
- self.mapView.direction = settings->bearing;
- self.mapView.pitch = settings->pitch;
- self.mapView.userTrackingMode = settings->userTrackingMode;
- self.mapView.showsUserLocation = settings->showsUserLocation;
- [self.mapView setDebugActive:settings->debug];
+ if (self.mapView) {
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSData *archivedCamera = [defaults objectForKey:@"camera"];
+ MGLMapCamera *camera = archivedCamera ? [NSKeyedUnarchiver unarchiveObjectWithData:archivedCamera] : nil;
+ if (camera)
+ {
+ self.mapView.camera = camera;
+ }
+ NSInteger uncheckedTrackingMode = [defaults integerForKey:@"userTrackingMode"];
+ if (uncheckedTrackingMode >= 0 &&
+ (NSUInteger)uncheckedTrackingMode >= MGLUserTrackingModeNone &&
+ (NSUInteger)uncheckedTrackingMode <= MGLUserTrackingModeFollowWithCourse)
+ {
+ self.mapView.userTrackingMode = (MGLUserTrackingMode)uncheckedTrackingMode;
+ }
+ self.mapView.showsUserLocation = [defaults boolForKey:@"showsUserLocation"];
+ self.mapView.debugActive = [defaults boolForKey:@"debug"];
}
}
@@ -339,12 +354,7 @@ mbgl::Settings_NSUserDefaults *settings = nullptr;
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
- if (settings)
- {
- [self saveState:nil];
- delete settings;
- settings = nullptr;
- }
+ [self saveState:nil];
}
#pragma mark - MGLMapViewDelegate
diff --git a/ios/app/mapboxgl-app.gypi b/ios/app/mapboxgl-app.gypi
index 34381ca158..8407ea7da2 100644
--- a/ios/app/mapboxgl-app.gypi
+++ b/ios/app/mapboxgl-app.gypi
@@ -32,7 +32,6 @@
'./MBXAppDelegate.m',
'./MBXViewController.h',
'./MBXViewController.mm',
- '../../platform/darwin/settings_nsuserdefaults.mm',
],
'xcode_settings': {