[ios] Debug mask
Ported MGLMapDebugMaskOptions from the OS X SDK. Deprecated debugActive and -cycleDebugOptions.
This commit is contained in:
committed by
Minh Nguyễn
parent
8cdd02bc8f
commit
6b3b3f3ff6
@@ -29,6 +29,20 @@ typedef NS_ENUM(NSUInteger, MGLAnnotationVerticalAlignment) {
|
||||
MGLAnnotationVerticalAlignmentBottom,
|
||||
};
|
||||
|
||||
/** Options for enabling debugging features in an MGLMapView instance. */
|
||||
typedef NS_OPTIONS(NSUInteger, MGLMapDebugMaskOptions) {
|
||||
/** Edges of tile boundaries are shown as thick, red lines to help diagnose
|
||||
tile clipping issues. */
|
||||
MGLMapDebugTileBoundariesMask = 1 << 1,
|
||||
/** Each tile shows its tile coordinate (x/y/z) in the upper-left corner. */
|
||||
MGLMapDebugTileInfoMask = 1 << 2,
|
||||
/** Each tile shows a timestamp indicating when it was loaded. */
|
||||
MGLMapDebugTimestampsMask = 1 << 3,
|
||||
/** Edges of glyphs and symbols are shown as faint, green lines to help
|
||||
diagnose collision and label placement issues. */
|
||||
MGLMapDebugCollisionBoxesMask = 1 << 4,
|
||||
};
|
||||
|
||||
/**
|
||||
An interactive, customizable map view with an interface similar to the one
|
||||
provided by Apple's MapKit.
|
||||
@@ -930,23 +944,19 @@ IB_DESIGNABLE
|
||||
*/
|
||||
- (void)removeOverlays:(NS_ARRAY_OF(id <MGLOverlay>) *)overlays;
|
||||
|
||||
#pragma mark Debugging
|
||||
#pragma mark Debugging the Map
|
||||
|
||||
/**
|
||||
A Boolean value that determines whether map debugging information is shown.
|
||||
|
||||
The default value of this property is `NO`.
|
||||
*/
|
||||
@property (nonatomic, getter=isDebugActive) BOOL debugActive;
|
||||
|
||||
/**
|
||||
Cycle through the options that determine which debugging aids are shown on the
|
||||
map.
|
||||
The options that determine which debugging aids are shown on the map.
|
||||
|
||||
These options are all disabled by default and should remain disabled in
|
||||
released software.
|
||||
released software for performance and aesthetic reasons.
|
||||
*/
|
||||
- (void)cycleDebugOptions;
|
||||
@property (nonatomic) MGLMapDebugMaskOptions debugMask;
|
||||
|
||||
@property (nonatomic, getter=isDebugActive) BOOL debugActive __attribute__((deprecated("Use -debugMask and -setDebugMask:.")));
|
||||
|
||||
- (void)cycleDebugOptions __attribute__((deprecated("Use -setDebugMask:.")));
|
||||
|
||||
/**
|
||||
Empties the in-memory tile cache.
|
||||
|
||||
@@ -104,7 +104,7 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
[defaults setObject:archivedCamera forKey:@"MBXCamera"];
|
||||
[defaults setInteger:self.mapView.userTrackingMode forKey:@"MBXUserTrackingMode"];
|
||||
[defaults setBool:self.mapView.showsUserLocation forKey:@"MBXShowsUserLocation"];
|
||||
[defaults setBool:self.mapView.debugActive forKey:@"MBXDebug"];
|
||||
[defaults setInteger:self.mapView.debugMask forKey:@"MBXDebugMask"];
|
||||
[defaults synchronize];
|
||||
}
|
||||
}
|
||||
@@ -127,7 +127,11 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
self.mapView.userTrackingMode = (MGLUserTrackingMode)uncheckedTrackingMode;
|
||||
}
|
||||
self.mapView.showsUserLocation = [defaults boolForKey:@"MBXShowsUserLocation"];
|
||||
self.mapView.debugActive = [defaults boolForKey:@"MBXDebug"];
|
||||
NSInteger uncheckedDebugMask = [defaults integerForKey:@"MBXDebugMask"];
|
||||
if (uncheckedDebugMask >= 0)
|
||||
{
|
||||
self.mapView.debugMask = (MGLMapDebugMaskOptions)uncheckedDebugMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,12 +144,24 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
|
||||
- (void)showSettings
|
||||
{
|
||||
MGLMapDebugMaskOptions debugMask = self.mapView.debugMask;
|
||||
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Map Settings"
|
||||
delegate:self
|
||||
cancelButtonTitle:@"Cancel"
|
||||
destructiveButtonTitle:nil
|
||||
otherButtonTitles:@"Reset Position",
|
||||
@"Cycle Debug Options",
|
||||
((debugMask & MGLMapDebugTileBoundariesMask)
|
||||
? @"Hide Tile Boundaries"
|
||||
: @"Show Tile Boundaries"),
|
||||
((debugMask & MGLMapDebugTileInfoMask)
|
||||
? @"Hide Tile Info"
|
||||
: @"Show Tile Info"),
|
||||
((debugMask & MGLMapDebugTimestampsMask)
|
||||
? @"Hide Tile Timestamps"
|
||||
: @"Show Tile Timestamps"),
|
||||
((debugMask & MGLMapDebugCollisionBoxesMask)
|
||||
? @"Hide Collision Boxes"
|
||||
: @"Show Collision Boxes"),
|
||||
@"Empty Memory",
|
||||
@"Add 100 Points",
|
||||
@"Add 1,000 Points",
|
||||
@@ -154,7 +170,9 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
@"Start World Tour",
|
||||
@"Add Custom Callout Point",
|
||||
@"Remove Annotations",
|
||||
@"Toggle Custom Style Layer",
|
||||
(_isShowingCustomStyleLayer
|
||||
? @"Hide Custom Style Layer"
|
||||
: @"Show Custom Style Layer"),
|
||||
@"Print Telemetry Logfile",
|
||||
@"Delete Telemetry Logfile",
|
||||
nil];
|
||||
@@ -170,25 +188,37 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 1)
|
||||
{
|
||||
[self.mapView cycleDebugOptions];
|
||||
self.mapView.debugMask ^= MGLMapDebugTileBoundariesMask;
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 2)
|
||||
{
|
||||
[self.mapView emptyMemoryCache];
|
||||
self.mapView.debugMask ^= MGLMapDebugTileInfoMask;
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 3)
|
||||
{
|
||||
[self parseFeaturesAddingCount:100];
|
||||
self.mapView.debugMask ^= MGLMapDebugTimestampsMask;
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 4)
|
||||
{
|
||||
[self parseFeaturesAddingCount:1000];
|
||||
self.mapView.debugMask ^= MGLMapDebugCollisionBoxesMask;
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 5)
|
||||
{
|
||||
[self parseFeaturesAddingCount:10000];
|
||||
[self.mapView emptyMemoryCache];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 6)
|
||||
{
|
||||
[self parseFeaturesAddingCount:100];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 7)
|
||||
{
|
||||
[self parseFeaturesAddingCount:1000];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 8)
|
||||
{
|
||||
[self parseFeaturesAddingCount:10000];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 9)
|
||||
{
|
||||
// PNW triangle
|
||||
//
|
||||
@@ -255,19 +285,19 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
free(polygonCoordinates);
|
||||
}
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 7)
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 10)
|
||||
{
|
||||
[self startWorldTour:actionSheet];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 8)
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 11)
|
||||
{
|
||||
[self presentAnnotationWithCustomCallout];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 9)
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 12)
|
||||
{
|
||||
[self.mapView removeAnnotations:self.mapView.annotations];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 10)
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 13)
|
||||
{
|
||||
if (_isShowingCustomStyleLayer)
|
||||
{
|
||||
@@ -278,12 +308,12 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
[self insertCustomStyleLayer];
|
||||
}
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 11)
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 14)
|
||||
{
|
||||
NSString *fileContents = [NSString stringWithContentsOfFile:[self telemetryDebugLogfilePath] encoding:NSUTF8StringEncoding error:nil];
|
||||
NSLog(@"%@", fileContents);
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 12)
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 15)
|
||||
{
|
||||
NSString *filePath = [self telemetryDebugLogfilePath];
|
||||
if ([[NSFileManager defaultManager] isDeletableFileAtPath:filePath]) {
|
||||
|
||||
@@ -52,7 +52,6 @@
|
||||
self.mapView.scrollEnabled = NO;
|
||||
self.mapView.rotateEnabled = NO;
|
||||
self.mapView.userInteractionEnabled = YES;
|
||||
[self.mapView setDebugActive:NO];
|
||||
|
||||
[self startBenchmarkIteration];
|
||||
|
||||
|
||||
@@ -219,7 +219,6 @@ public:
|
||||
|
||||
#pragma mark - Setup & Teardown -
|
||||
|
||||
@dynamic debugActive;
|
||||
mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
|
||||
{
|
||||
return std::chrono::duration_cast<mbgl::Duration>(std::chrono::duration<NSTimeInterval>(duration));
|
||||
@@ -967,7 +966,7 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
|
||||
self.glSnapshotView.image = self.glView.snapshot;
|
||||
self.glSnapshotView.hidden = NO;
|
||||
|
||||
if (_mbglMap->getDebug() != mbgl::MapDebugOptions::NoDebug && [self.glSnapshotView.subviews count] == 0)
|
||||
if (self.debugMask && [self.glSnapshotView.subviews count] == 0)
|
||||
{
|
||||
UIView *snapshotTint = [[UIView alloc] initWithFrame:self.glSnapshotView.bounds];
|
||||
snapshotTint.autoresizingMask = self.glSnapshotView.autoresizingMask;
|
||||
@@ -1641,17 +1640,61 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
|
||||
return [NSSet setWithObject:@"allowsTilting"];
|
||||
}
|
||||
|
||||
- (MGLMapDebugMaskOptions)debugMask
|
||||
{
|
||||
mbgl::MapDebugOptions options = _mbglMap->getDebug();
|
||||
MGLMapDebugMaskOptions mask = 0;
|
||||
if (options & mbgl::MapDebugOptions::TileBorders)
|
||||
{
|
||||
mask |= MGLMapDebugTileBoundariesMask;
|
||||
}
|
||||
if (options & mbgl::MapDebugOptions::ParseStatus)
|
||||
{
|
||||
mask |= MGLMapDebugTileInfoMask;
|
||||
}
|
||||
if (options & mbgl::MapDebugOptions::Timestamps)
|
||||
{
|
||||
mask |= MGLMapDebugTimestampsMask;
|
||||
}
|
||||
if (options & mbgl::MapDebugOptions::Collision)
|
||||
{
|
||||
mask |= MGLMapDebugCollisionBoxesMask;
|
||||
}
|
||||
return mask;
|
||||
}
|
||||
|
||||
- (void)setDebugMask:(MGLMapDebugMaskOptions)debugMask
|
||||
{
|
||||
mbgl::MapDebugOptions options = mbgl::MapDebugOptions::NoDebug;
|
||||
if (debugMask & MGLMapDebugTileBoundariesMask)
|
||||
{
|
||||
options |= mbgl::MapDebugOptions::TileBorders;
|
||||
}
|
||||
if (debugMask & MGLMapDebugTileInfoMask)
|
||||
{
|
||||
options |= mbgl::MapDebugOptions::ParseStatus;
|
||||
}
|
||||
if (debugMask & MGLMapDebugTimestampsMask)
|
||||
{
|
||||
options |= mbgl::MapDebugOptions::Timestamps;
|
||||
}
|
||||
if (debugMask & MGLMapDebugCollisionBoxesMask)
|
||||
{
|
||||
options |= mbgl::MapDebugOptions::Collision;
|
||||
}
|
||||
_mbglMap->setDebug(options);
|
||||
}
|
||||
|
||||
- (void)setDebugActive:(BOOL)debugActive
|
||||
{
|
||||
_mbglMap->setDebug(debugActive ? mbgl::MapDebugOptions::TileBorders
|
||||
| mbgl::MapDebugOptions::ParseStatus
|
||||
| mbgl::MapDebugOptions::Collision
|
||||
: mbgl::MapDebugOptions::NoDebug);
|
||||
self.debugMask = debugActive ? (MGLMapDebugTileBoundariesMask |
|
||||
MGLMapDebugTileInfoMask |
|
||||
MGLMapDebugCollisionBoxesMask) : 0;
|
||||
}
|
||||
|
||||
- (BOOL)isDebugActive
|
||||
{
|
||||
return (_mbglMap->getDebug() != mbgl::MapDebugOptions::NoDebug);
|
||||
return self.debugMask;
|
||||
}
|
||||
|
||||
- (void)resetNorth
|
||||
|
||||
Reference in New Issue
Block a user