Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
Made lat/lon/zoom inspectable
Browse files Browse the repository at this point in the history
Declared these IB-specific inspectables in a separate category that developers are not expected to import. Currently these inspectables are order-dependent due to #1181.

Ref #929
  • Loading branch information
1ec5 committed Apr 3, 2015
1 parent da13225 commit 836de8b
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 7 deletions.
1 change: 1 addition & 0 deletions gyp/platform-ios.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
'../include/mbgl/ios/MGLMapboxEvents.h',
'../platform/ios/MGLMapboxEvents.m',
'../include/mbgl/ios/MGLMapView.h',
'../include/mbgl/ios/MGLMapView+IBAdditions.h',
'../platform/ios/MGLMapView.mm',
'../include/mbgl/ios/MGLAnnotation.h',
'../include/mbgl/ios/MGLUserLocation.h',
Expand Down
29 changes: 29 additions & 0 deletions include/mbgl/ios/MGLMapView+IBAdditions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#import "MGLMapView.h"

@interface MGLMapView (IBAdditions)

// Core properties that can be manipulated in the Attributes inspector in
// Interface Builder. These redeclarations merely add the IBInspectable keyword.
// They appear here to ensure that they appear above the convenience properties;
// inspectables declared in MGLMapView.h are always sorted before those in
// MGLMapView+IBAdditions.h, due to ASCII sort order.

@property (nonatomic) IBInspectable NSString *accessToken;
@property (nonatomic) IBInspectable NSString *mapID;

// Some convenience properties related to the initial viewport. These properties
// are not meant to be used outside of Interface Builder. latitude and longitude
// are backed by properties of type CLLocationDegrees, but these declarations
// must use the type double because Interface Builder is unaware that
// CLLocationDegrees is a typedef for double.

/// Initial latitude at which the receiver is centered.
@property (nonatomic) IBInspectable double latitude;

/// Initial longitude at which the receiver is centered.
@property (nonatomic) IBInspectable double longitude;

/// Initial zoom level of the receiver.
@property (nonatomic) IBInspectable double zoomLevel;

@end
14 changes: 7 additions & 7 deletions include/mbgl/ios/MGLMapView.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,8 @@ IB_DESIGNABLE

/** @name Authorizing Access */

/** Sets a Mapbox API access token for the map view.
* @param accessToken A Mapbox API token. */
@property (nonatomic) IBInspectable NSString *accessToken;
/** Mapbox API access token for the map view. */
@property (nonatomic) NSString *accessToken;

#pragma mark - Managing Constraints

Expand Down Expand Up @@ -166,10 +165,11 @@ IB_DESIGNABLE
/** @name Styling the Map */

/** Mapbox map ID of the style currently displayed in the receiver, or `nil` if the style does not have a map ID.
The style may lack a map ID if it is located at an HTTP, HTTPS, or asset: URL. Use -styleURL to get the URL in these cases.
*/
@property (nonatomic) IBInspectable NSString *mapID;
*
* The style may lack a map ID if it is located at an HTTP, HTTPS, or local file URL. Use `styleURL` to get the URL in these cases.
*
* To display the default style, set this property to `nil`. */
@property (nonatomic) NSString *mapID;

/** Returns the URLs to the styles bundled with the library. */
- (NSArray *)bundledStyleURLs;
Expand Down
66 changes: 66 additions & 0 deletions platform/ios/MGLMapView.mm
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#import "MGLMapView.h"
#import "MGLMapView+IBAdditions.h"

#import <mbgl/platform/log.hpp>
#import <mbgl/platform/gl.hpp>
Expand Down Expand Up @@ -92,6 +93,8 @@ @interface MGLMapView () <UIGestureRecognizerDelegate, GLKViewDelegate, CLLocati

@implementation MGLMapView {
BOOL _isTargetingInterfaceBuilder;
CLLocationDegrees _pendingLatitude;
CLLocationDegrees _pendingLongitude;
}

#pragma mark - Setup & Teardown -
Expand Down Expand Up @@ -365,6 +368,8 @@ - (BOOL)commonInit
// set initial position
//
mbglMap->setLatLngZoom(mbgl::LatLng(0, 0), mbglMap->getMinZoom());
_pendingLatitude = NAN;
_pendingLongitude = NAN;

// setup change delegate queue
//
Expand Down Expand Up @@ -1126,6 +1131,11 @@ - (void)toggleDebug

#pragma mark - Geography -

+ (NSSet *)keyPathsForValuesAffectingCenterCoordinate
{
return [NSSet setWithObjects:@"latitude", @"longitude", nil];
}

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated preservingTracking:(BOOL)tracking
{
self.userTrackingMode = (tracking ? self.userTrackingMode : MGLUserTrackingModeNone);
Expand Down Expand Up @@ -2388,3 +2398,59 @@ void invalidate() override
};

@end

@implementation MGLMapView (IBAdditions)

+ (NSSet *)keyPathsForValuesAffectingLatitude
{
return [NSSet setWithObject:@"centerCoordinate"];
}

- (double)latitude
{
return self.centerCoordinate.latitude;
}

- (void)setLatitude:(double)latitude
{
if ( ! isnan(_pendingLongitude))
{
self.centerCoordinate = CLLocationCoordinate2DMake(latitude, _pendingLongitude);
_pendingLatitude = NAN;
_pendingLongitude = NAN;
}
else
{
// Not enough info to make a valid center coordinate yet. Stash this
// latitude away until the longitude is set too.
_pendingLatitude = latitude;
}
}

+ (NSSet *)keyPathsForValuesAffectingLongitude
{
return [NSSet setWithObject:@"centerCoordinate"];
}

- (double)longitude
{
return self.centerCoordinate.longitude;
}

- (void)setLongitude:(double)longitude
{
if ( ! isnan(_pendingLatitude))
{
self.centerCoordinate = CLLocationCoordinate2DMake(_pendingLatitude, longitude);
_pendingLatitude = NAN;
_pendingLongitude = NAN;
}
else
{
// Not enough info to make a valid center coordinate yet. Stash this
// longitude away until the latitude is set too.
_pendingLongitude = longitude;
}
}

@end

0 comments on commit 836de8b

Please sign in to comment.