diff options
author | Fabian Guerra <fabian.guerra@mapbox.com> | 2017-09-27 12:08:24 -0400 |
---|---|---|
committer | Fabian Guerra <fabian.guerra@mapbox.com> | 2017-09-27 12:08:24 -0400 |
commit | 6d1fdf2ca3a93839bc7dc0929599dd096ab00e33 (patch) | |
tree | 5436aefbab4abcba5caa5020c62c24de7d493616 /platform/ios/src/MGLUserLocationHeadingArrowLayer.m | |
parent | fafe0928227ec8e944e1ec68ee1d2bbc1c52f6ae (diff) | |
parent | 3f52377543885170da6a27e1c24657cc4cbcf29c (diff) | |
download | qtlocation-mapboxgl-6d1fdf2ca3a93839bc7dc0929599dd096ab00e33.tar.gz |
Merge branch 'release-ios-v3.6.0-android-v5.1.0' into master.upstream/fabian-merge-release-ios-v3.6.0-final
# Conflicts:
# circle.yml
# platform/android/CHANGELOG.md
# platform/android/MapboxGLAndroidSDK/gradle.properties
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
# platform/android/dependencies.gradle
# platform/default/mbgl/storage/offline_database.cpp
# platform/ios/CHANGELOG.md
# platform/ios/Mapbox-iOS-SDK-nightly-dynamic.podspec
# platform/ios/Mapbox-iOS-SDK-symbols.podspec
# platform/ios/Mapbox-iOS-SDK.podspec
# platform/ios/app/Main.storyboard
# platform/ios/src/MGLMapView.mm
# src/mbgl/programs/attributes.hpp
# src/mbgl/renderer/painter_fill.cpp
# src/mbgl/tile/geometry_tile.hpp
# src/mbgl/tile/geometry_tile_worker.cpp
# src/mbgl/tile/raster_tile.cpp
# src/mbgl/tile/raster_tile.hpp
# src/mbgl/tile/raster_tile_worker.cpp
# test/tile/annotation_tile.test.cpp
# test/tile/geojson_tile.test.cpp
# test/tile/raster_tile.test.cpp
# test/tile/vector_tile.test.cpp
Diffstat (limited to 'platform/ios/src/MGLUserLocationHeadingArrowLayer.m')
-rw-r--r-- | platform/ios/src/MGLUserLocationHeadingArrowLayer.m | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/platform/ios/src/MGLUserLocationHeadingArrowLayer.m b/platform/ios/src/MGLUserLocationHeadingArrowLayer.m new file mode 100644 index 0000000000..912ce30c35 --- /dev/null +++ b/platform/ios/src/MGLUserLocationHeadingArrowLayer.m @@ -0,0 +1,59 @@ +#import "MGLUserLocationHeadingArrowLayer.h" + +#import "MGLFaux3DUserLocationAnnotationView.h" +#import "MGLGeometry.h" + +const CGFloat MGLUserLocationHeadingArrowSize = 6; + +@implementation MGLUserLocationHeadingArrowLayer + +- (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView +{ + CGFloat size = userLocationView.bounds.size.width + MGLUserLocationHeadingArrowSize; + + self = [super init]; + self.bounds = CGRectMake(0, 0, size, size); + self.position = CGPointMake(CGRectGetMidX(userLocationView.bounds), CGRectGetMidY(userLocationView.bounds)); + self.path = [self arrowPath]; + self.fillColor = userLocationView.tintColor.CGColor; + self.shouldRasterize = YES; + self.rasterizationScale = UIScreen.mainScreen.scale; + self.drawsAsynchronously = YES; + + self.strokeColor = UIColor.whiteColor.CGColor; + self.lineWidth = 1.0; + self.lineJoin = kCALineJoinRound; + + return self; +} + +- (void)updateHeadingAccuracy:(CLLocationDirection)accuracy +{ + // unimplemented +} + +- (void)updateTintColor:(CGColorRef)color +{ + self.fillColor = color; +} + +- (CGPathRef)arrowPath { + CGFloat center = roundf(CGRectGetMidX(self.bounds)); + CGFloat size = MGLUserLocationHeadingArrowSize; + + CGPoint top = CGPointMake(center, 0); + CGPoint left = CGPointMake(center - size, size); + CGPoint right = CGPointMake(center + size, size); + CGPoint middle = CGPointMake(center, size / M_PI); + + UIBezierPath *bezierPath = [UIBezierPath bezierPath]; + [bezierPath moveToPoint:top]; + [bezierPath addLineToPoint:left]; + [bezierPath addQuadCurveToPoint:right controlPoint:middle]; + [bezierPath addLineToPoint:top]; + [bezierPath closePath]; + + return bezierPath.CGPath; +} + +@end |