@rnmapbox/maps 10.0.0-beta.70 → 10.0.0-beta.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/android/rctmgl/build.gradle +1 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +68 -29
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.kt +16 -13
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/UserTrackingMode.kt +42 -0
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +49 -13
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.kt +23 -0
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.kt +21 -0
- package/index.d.ts +23 -62
- package/ios/RCTMGL-v10/RCMTGLImage.swift +93 -0
- package/ios/RCTMGL-v10/RCMTGLImageManager.m +9 -0
- package/ios/RCTMGL-v10/RCMTGLImageManager.swift +14 -0
- package/ios/RCTMGL-v10/RCTMGLCamera.swift +52 -26
- package/ios/RCTMGL-v10/RCTMGLCameraManager.m +5 -2
- package/ios/RCTMGL-v10/RCTMGLImages.swift +113 -8
- package/ios/install.md +1 -1
- package/javascript/components/Camera.tsx +7 -3
- package/javascript/components/Image.tsx +55 -0
- package/javascript/components/Images.tsx +156 -0
- package/javascript/index.js +3 -0
- package/javascript/modules/location/{locationManager.js → locationManager.ts} +91 -18
- package/javascript/utils/MapboxStyles.d.ts +3 -3
- package/javascript/utils/styleMap.ts +2 -2
- package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +2 -5
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
- package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
- package/lib/commonjs/classes/index.d.js.map +1 -1
- package/lib/commonjs/classes/index.js.map +1 -1
- package/lib/commonjs/components/AbstractLayer.js +6 -10
- package/lib/commonjs/components/AbstractLayer.js.map +1 -1
- package/lib/commonjs/components/AbstractSource.js +3 -10
- package/lib/commonjs/components/AbstractSource.js.map +1 -1
- package/lib/commonjs/components/Atmosphere.js.map +1 -1
- package/lib/commonjs/components/BackgroundLayer.js +3 -6
- package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
- package/lib/commonjs/components/Callout.js +27 -30
- package/lib/commonjs/components/Callout.js.map +1 -1
- package/lib/commonjs/components/Camera.js +3 -1
- package/lib/commonjs/components/Camera.js.map +1 -1
- package/lib/commonjs/components/CircleLayer.js +3 -6
- package/lib/commonjs/components/CircleLayer.js.map +1 -1
- package/lib/commonjs/components/FillExtrusionLayer.js +3 -6
- package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
- package/lib/commonjs/components/FillLayer.js +3 -6
- package/lib/commonjs/components/FillLayer.js.map +1 -1
- package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
- package/lib/commonjs/components/HeatmapLayer.js +3 -6
- package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
- package/lib/commonjs/components/Image.js +34 -0
- package/lib/commonjs/components/Image.js.map +1 -0
- package/lib/commonjs/components/ImageSource.js +16 -19
- package/lib/commonjs/components/ImageSource.js.map +1 -1
- package/lib/commonjs/components/Images.js +16 -34
- package/lib/commonjs/components/Images.js.map +1 -1
- package/lib/commonjs/components/Light.js +7 -10
- package/lib/commonjs/components/Light.js.map +1 -1
- package/lib/commonjs/components/LineLayer.js +3 -6
- package/lib/commonjs/components/LineLayer.js.map +1 -1
- package/lib/commonjs/components/MapView.js +227 -230
- package/lib/commonjs/components/MapView.js.map +1 -1
- package/lib/commonjs/components/MarkerView.js +9 -16
- package/lib/commonjs/components/MarkerView.js.map +1 -1
- package/lib/commonjs/components/NativeBridgeComponent.js +0 -7
- package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
- package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
- package/lib/commonjs/components/PointAnnotation.js +8 -11
- package/lib/commonjs/components/PointAnnotation.js.map +1 -1
- package/lib/commonjs/components/RasterDemSource.js +36 -39
- package/lib/commonjs/components/RasterDemSource.js.map +1 -1
- package/lib/commonjs/components/RasterLayer.js +3 -6
- package/lib/commonjs/components/RasterLayer.js.map +1 -1
- package/lib/commonjs/components/RasterSource.js +45 -48
- package/lib/commonjs/components/RasterSource.js.map +1 -1
- package/lib/commonjs/components/ShapeSource.js +4 -7
- package/lib/commonjs/components/ShapeSource.js.map +1 -1
- package/lib/commonjs/components/SkyLayer.js +3 -6
- package/lib/commonjs/components/SkyLayer.js.map +1 -1
- package/lib/commonjs/components/Style.js.map +1 -1
- package/lib/commonjs/components/SymbolLayer.js +3 -6
- package/lib/commonjs/components/SymbolLayer.js.map +1 -1
- package/lib/commonjs/components/Terrain.js.map +1 -1
- package/lib/commonjs/components/UserLocation.js +68 -70
- package/lib/commonjs/components/UserLocation.js.map +1 -1
- package/lib/commonjs/components/VectorSource.js +63 -66
- package/lib/commonjs/components/VectorSource.js.map +1 -1
- package/lib/commonjs/components/annotations/Annotation.js +16 -19
- package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/modules/location/locationManager.js +21 -10
- package/lib/commonjs/modules/location/locationManager.js.map +1 -1
- package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
- package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
- package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
- package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
- package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/commonjs/utils/BridgeValue.js +0 -4
- package/lib/commonjs/utils/BridgeValue.js.map +1 -1
- package/lib/commonjs/utils/Logger.js +1 -4
- package/lib/commonjs/utils/Logger.js.map +1 -1
- package/lib/commonjs/utils/MapboxStyles.d.js.map +1 -1
- package/lib/commonjs/utils/StyleValue.js.map +1 -1
- package/lib/commonjs/utils/animated/Animated.js.map +1 -1
- package/lib/commonjs/utils/deprecation.js.map +1 -1
- package/lib/commonjs/utils/filterUtils.js.map +1 -1
- package/lib/commonjs/utils/geoUtils.d.js.map +1 -1
- package/lib/commonjs/utils/geoUtils.js.map +1 -1
- package/lib/commonjs/utils/getAnnotationsLayerID.js.map +1 -1
- package/lib/commonjs/utils/index.d.js.map +1 -1
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/styleMap.js +2 -2
- package/lib/commonjs/utils/styleMap.js.map +1 -1
- package/lib/commonjs/web/MapContext.js.map +1 -1
- package/lib/commonjs/web/MapboxModule.js.map +1 -1
- package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
- package/lib/commonjs/web/components/Camera.js +2 -9
- package/lib/commonjs/web/components/Camera.js.map +1 -1
- package/lib/commonjs/web/components/MapView.js +5 -11
- package/lib/commonjs/web/components/MapView.js.map +1 -1
- package/lib/commonjs/web/index.js.map +1 -1
- package/lib/commonjs/web/utils/Logger.js +3 -7
- package/lib/commonjs/web/utils/Logger.js.map +1 -1
- package/lib/module/classes/AnimatedCoordinatesArray.js.map +1 -1
- package/lib/module/classes/AnimatedExtractCoordinateFromArray.js +2 -5
- package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/module/classes/AnimatedPoint.js.map +1 -1
- package/lib/module/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
- package/lib/module/classes/AnimatedShape.js.map +1 -1
- package/lib/module/classes/index.d.js.map +1 -1
- package/lib/module/classes/index.js.map +1 -1
- package/lib/module/components/AbstractLayer.js +4 -10
- package/lib/module/components/AbstractLayer.js.map +1 -1
- package/lib/module/components/AbstractSource.js +3 -10
- package/lib/module/components/AbstractSource.js.map +1 -1
- package/lib/module/components/Atmosphere.js.map +1 -1
- package/lib/module/components/BackgroundLayer.js +3 -6
- package/lib/module/components/BackgroundLayer.js.map +1 -1
- package/lib/module/components/Callout.js +27 -30
- package/lib/module/components/Callout.js.map +1 -1
- package/lib/module/components/Camera.js +3 -1
- package/lib/module/components/Camera.js.map +1 -1
- package/lib/module/components/CircleLayer.js +3 -6
- package/lib/module/components/CircleLayer.js.map +1 -1
- package/lib/module/components/FillExtrusionLayer.js +3 -6
- package/lib/module/components/FillExtrusionLayer.js.map +1 -1
- package/lib/module/components/FillLayer.js +3 -6
- package/lib/module/components/FillLayer.js.map +1 -1
- package/lib/module/components/HeadingIndicator.js.map +1 -1
- package/lib/module/components/HeatmapLayer.js +3 -6
- package/lib/module/components/HeatmapLayer.js.map +1 -1
- package/lib/module/components/Image.js +24 -0
- package/lib/module/components/Image.js.map +1 -0
- package/lib/module/components/ImageSource.js +16 -19
- package/lib/module/components/ImageSource.js.map +1 -1
- package/lib/module/components/Images.js +18 -36
- package/lib/module/components/Images.js.map +1 -1
- package/lib/module/components/Light.js +7 -10
- package/lib/module/components/Light.js.map +1 -1
- package/lib/module/components/LineLayer.js +3 -6
- package/lib/module/components/LineLayer.js.map +1 -1
- package/lib/module/components/MapView.js +227 -230
- package/lib/module/components/MapView.js.map +1 -1
- package/lib/module/components/MarkerView.js +9 -16
- package/lib/module/components/MarkerView.js.map +1 -1
- package/lib/module/components/NativeBridgeComponent.js +0 -7
- package/lib/module/components/NativeBridgeComponent.js.map +1 -1
- package/lib/module/components/NativeUserLocation.js.map +1 -1
- package/lib/module/components/PointAnnotation.js +8 -11
- package/lib/module/components/PointAnnotation.js.map +1 -1
- package/lib/module/components/RasterDemSource.js +36 -39
- package/lib/module/components/RasterDemSource.js.map +1 -1
- package/lib/module/components/RasterLayer.js +3 -6
- package/lib/module/components/RasterLayer.js.map +1 -1
- package/lib/module/components/RasterSource.js +45 -48
- package/lib/module/components/RasterSource.js.map +1 -1
- package/lib/module/components/ShapeSource.js +4 -7
- package/lib/module/components/ShapeSource.js.map +1 -1
- package/lib/module/components/SkyLayer.js +3 -6
- package/lib/module/components/SkyLayer.js.map +1 -1
- package/lib/module/components/Style.js.map +1 -1
- package/lib/module/components/SymbolLayer.js +3 -6
- package/lib/module/components/SymbolLayer.js.map +1 -1
- package/lib/module/components/Terrain.js.map +1 -1
- package/lib/module/components/UserLocation.js +68 -70
- package/lib/module/components/UserLocation.js.map +1 -1
- package/lib/module/components/VectorSource.js +63 -66
- package/lib/module/components/VectorSource.js.map +1 -1
- package/lib/module/components/annotations/Annotation.js +16 -19
- package/lib/module/components/annotations/Annotation.js.map +1 -1
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/modules/location/locationManager.js +22 -10
- package/lib/module/modules/location/locationManager.js.map +1 -1
- package/lib/module/modules/offline/OfflineCreatePackOptions.js.map +1 -1
- package/lib/module/modules/offline/OfflinePack.js.map +1 -1
- package/lib/module/modules/offline/offlineManager.js.map +1 -1
- package/lib/module/modules/snapshot/SnapshotOptions.js.map +1 -1
- package/lib/module/modules/snapshot/snapshotManager.js.map +1 -1
- package/lib/module/types/index.js.map +1 -1
- package/lib/module/utils/BridgeValue.js +0 -4
- package/lib/module/utils/BridgeValue.js.map +1 -1
- package/lib/module/utils/Logger.js +1 -4
- package/lib/module/utils/Logger.js.map +1 -1
- package/lib/module/utils/MapboxStyles.d.js.map +1 -1
- package/lib/module/utils/StyleValue.js.map +1 -1
- package/lib/module/utils/animated/Animated.js.map +1 -1
- package/lib/module/utils/deprecation.js.map +1 -1
- package/lib/module/utils/filterUtils.js.map +1 -1
- package/lib/module/utils/geoUtils.d.js.map +1 -1
- package/lib/module/utils/geoUtils.js.map +1 -1
- package/lib/module/utils/getAnnotationsLayerID.js.map +1 -1
- package/lib/module/utils/index.d.js.map +1 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/styleMap.js +2 -2
- package/lib/module/utils/styleMap.js.map +1 -1
- package/lib/module/web/MapContext.js.map +1 -1
- package/lib/module/web/MapboxModule.js.map +1 -1
- package/lib/module/web/UnimplementedComponent.js.map +1 -1
- package/lib/module/web/components/Camera.js +2 -9
- package/lib/module/web/components/Camera.js.map +1 -1
- package/lib/module/web/components/MapView.js +5 -11
- package/lib/module/web/components/MapView.js.map +1 -1
- package/lib/module/web/index.js.map +1 -1
- package/lib/module/web/utils/Logger.js +3 -7
- package/lib/module/web/utils/Logger.js.map +1 -1
- package/lib/typescript/components/Camera.d.ts +4 -2
- package/lib/typescript/components/Camera.d.ts.map +1 -1
- package/lib/typescript/components/Image.d.ts +20 -0
- package/lib/typescript/components/Image.d.ts.map +1 -0
- package/lib/typescript/components/Images.d.ts +59 -0
- package/lib/typescript/components/Images.d.ts.map +1 -0
- package/lib/typescript/modules/location/locationManager.d.ts +87 -0
- package/lib/typescript/modules/location/locationManager.d.ts.map +1 -0
- package/lib/typescript/utils/styleMap.d.ts +2 -2
- package/package.json +1 -1
- package/rnmapbox-maps.podspec +1 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/UserTrackingMode.java +0 -54
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.java +0 -37
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/UserLocationVerticalAlignment.java +0 -7
- package/javascript/components/Images.js +0 -118
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import MapboxMaps
|
|
2
|
+
|
|
3
|
+
class RCTMGLImage : UIView {
|
|
4
|
+
@objc
|
|
5
|
+
var name: String = ""
|
|
6
|
+
|
|
7
|
+
var image: UIImage? = nil
|
|
8
|
+
|
|
9
|
+
var sdf: Bool? = nil
|
|
10
|
+
var stretchX: [[NSNumber]] = []
|
|
11
|
+
var stretchY: [[NSNumber]] = []
|
|
12
|
+
|
|
13
|
+
weak var images: RCTMGLImageSetter? = nil {
|
|
14
|
+
didSet {
|
|
15
|
+
DispatchQueue.main.async { self.setImage() }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
weak var bridge : RCTBridge! = nil
|
|
19
|
+
|
|
20
|
+
var reactSubviews : [UIView] = []
|
|
21
|
+
|
|
22
|
+
// MARK: - subview management
|
|
23
|
+
|
|
24
|
+
@objc open override func insertReactSubview(_ subview: UIView!, at atIndex: Int) {
|
|
25
|
+
reactSubviews.insert(subview, at: atIndex)
|
|
26
|
+
if reactSubviews.count > 1 {
|
|
27
|
+
Logger.log(level: .error, message: "Image supports max 1 subview")
|
|
28
|
+
}
|
|
29
|
+
if image == nil {
|
|
30
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + .microseconds(10)) {
|
|
31
|
+
self.setImage()
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@objc
|
|
37
|
+
open override func removeReactSubview(_ subview: UIView!) {
|
|
38
|
+
reactSubviews.removeAll(where: { $0 == subview })
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// MARK: - view shnapshot
|
|
42
|
+
|
|
43
|
+
func changeImage(_ image: UIImage, name: String) {
|
|
44
|
+
if let images = images {
|
|
45
|
+
let _ = images.addImage(name: name, image: image, sdf: sdf, stretchX:stretchX, stretchY:stretchY, log: "RCTMGLImage.addImage")
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
func setImage() {
|
|
50
|
+
if let image = _createViewSnapshot() {
|
|
51
|
+
changeImage(image, name: name)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
func _createViewSnapshot() -> UIImage? {
|
|
56
|
+
let useDummyImage = false
|
|
57
|
+
if useDummyImage {
|
|
58
|
+
let size = CGSize(width: 32, height: 32)
|
|
59
|
+
let renderer = UIGraphicsImageRenderer(size: size)
|
|
60
|
+
let image = renderer.image { context in
|
|
61
|
+
UIColor.darkGray.setStroke()
|
|
62
|
+
context.stroke(CGRect(x: 0, y:0, width: 32, height: 32))
|
|
63
|
+
UIColor(red: 158/255, green: 215/255, blue: 245/255, alpha: 1).setFill()
|
|
64
|
+
context.fill(CGRect(x: 2, y: 2, width: 30, height: 30))
|
|
65
|
+
}
|
|
66
|
+
return image
|
|
67
|
+
}
|
|
68
|
+
guard reactSubviews.count > 0 else {
|
|
69
|
+
return nil
|
|
70
|
+
}
|
|
71
|
+
return _createViewSnapshot(view: reactSubviews[0])
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
func _createViewSnapshot(view: UIView) -> UIImage? {
|
|
75
|
+
guard view.bounds.size.width > 0 && view.bounds.size.height > 0 else {
|
|
76
|
+
return nil
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
let roundUp = 4
|
|
80
|
+
|
|
81
|
+
let adjustedSize = CGSize(
|
|
82
|
+
width: ((Int(view.bounds.size.width)+roundUp-1)/roundUp)*roundUp,
|
|
83
|
+
height: ((Int(view.bounds.size.height)+roundUp-1)/roundUp)*roundUp
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
let renderer = UIGraphicsImageRenderer(size: adjustedSize)
|
|
87
|
+
let image = renderer.image { context in
|
|
88
|
+
view.layer.render(in: context.cgContext)
|
|
89
|
+
}
|
|
90
|
+
return image
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
@objc(RCTMGLImageManager)
|
|
3
|
+
class RCTMGLImageManager : RCTViewManager {
|
|
4
|
+
@objc
|
|
5
|
+
override static func requiresMainQueueSetup() -> Bool {
|
|
6
|
+
return true
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
override func view() -> UIView! {
|
|
10
|
+
let layer = RCTMGLImage()
|
|
11
|
+
layer.bridge = self.bridge
|
|
12
|
+
return layer
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -107,57 +107,67 @@ open class RCTMGLMapComponentBase : UIView, RCTMGLMapComponent {
|
|
|
107
107
|
class RCTMGLCamera : RCTMGLMapComponentBase, LocationConsumer {
|
|
108
108
|
var cameraAnimator: BasicCameraAnimator?
|
|
109
109
|
let cameraUpdateQueue = CameraUpdateQueue()
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
// MARK: React properties
|
|
112
112
|
|
|
113
113
|
@objc var animationDuration: NSNumber?
|
|
114
|
+
|
|
114
115
|
@objc var animationMode: NSString?
|
|
116
|
+
|
|
115
117
|
@objc var defaultStop: [String: Any]?
|
|
116
|
-
|
|
118
|
+
|
|
119
|
+
@objc var followUserLocation : Bool = false {
|
|
117
120
|
didSet {
|
|
118
121
|
_updateCameraFromTrackingMode()
|
|
119
122
|
}
|
|
120
123
|
}
|
|
121
|
-
|
|
124
|
+
|
|
125
|
+
@objc var followUserMode: String? {
|
|
122
126
|
didSet {
|
|
123
127
|
_updateCameraFromTrackingMode()
|
|
124
128
|
}
|
|
125
129
|
}
|
|
126
|
-
|
|
127
|
-
@objc var
|
|
130
|
+
|
|
131
|
+
@objc var followZoomLevel: NSNumber? {
|
|
128
132
|
didSet {
|
|
129
133
|
_updateCameraFromTrackingMode()
|
|
130
134
|
}
|
|
131
135
|
}
|
|
132
|
-
|
|
133
|
-
@objc var
|
|
136
|
+
|
|
137
|
+
@objc var followPitch: NSNumber? {
|
|
134
138
|
didSet {
|
|
135
139
|
_updateCameraFromTrackingMode()
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
|
-
|
|
139
|
-
@objc var
|
|
142
|
+
|
|
143
|
+
@objc var followHeading: NSNumber? {
|
|
140
144
|
didSet {
|
|
141
145
|
_updateCameraFromTrackingMode()
|
|
142
146
|
}
|
|
143
147
|
}
|
|
144
|
-
|
|
148
|
+
|
|
149
|
+
@objc var followPadding: NSDictionary? {
|
|
150
|
+
didSet {
|
|
151
|
+
_updateCameraFromTrackingMode()
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
145
155
|
@objc var maxZoomLevel: NSNumber? {
|
|
146
156
|
didSet { _updateMaxBounds() }
|
|
147
157
|
}
|
|
148
|
-
|
|
158
|
+
|
|
149
159
|
@objc var minZoomLevel: NSNumber? {
|
|
150
160
|
didSet { _updateMaxBounds() }
|
|
151
161
|
}
|
|
152
|
-
|
|
162
|
+
|
|
153
163
|
@objc var onUserTrackingModeChange: RCTBubblingEventBlock? = nil
|
|
154
|
-
|
|
164
|
+
|
|
155
165
|
@objc var stop: [String: Any]? {
|
|
156
166
|
didSet {
|
|
157
167
|
_updateCamera()
|
|
158
168
|
}
|
|
159
169
|
}
|
|
160
|
-
|
|
170
|
+
|
|
161
171
|
@objc var maxBounds: String? {
|
|
162
172
|
didSet {
|
|
163
173
|
if let maxBounds = maxBounds {
|
|
@@ -288,22 +298,23 @@ class RCTMGLCamera : RCTMGLMapComponentBase, LocationConsumer {
|
|
|
288
298
|
followOptions.bearing = nil
|
|
289
299
|
trackingModeChanged = true
|
|
290
300
|
}
|
|
301
|
+
|
|
291
302
|
if let onUserTrackingModeChange = self.onUserTrackingModeChange {
|
|
292
303
|
if (trackingModeChanged) {
|
|
293
304
|
let event = RCTMGLEvent(type: .onUserTrackingModeChange, payload: ["followUserMode": self.followUserMode ?? "normal", "followUserLocation": self.followUserLocation])
|
|
294
305
|
onUserTrackingModeChange(event.toJSON())
|
|
295
306
|
}
|
|
296
307
|
}
|
|
308
|
+
|
|
297
309
|
var _camera = CameraOptions()
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if (stopHeading >= 0.0) {
|
|
304
|
-
_camera.bearing = stopHeading
|
|
310
|
+
|
|
311
|
+
if let zoom = self.followZoomLevel as? CGFloat {
|
|
312
|
+
if (zoom >= 0.0) {
|
|
313
|
+
_camera.zoom = zoom
|
|
314
|
+
followOptions.zoom = zoom
|
|
305
315
|
}
|
|
306
316
|
}
|
|
317
|
+
|
|
307
318
|
if let followPitch = self.followPitch as? CGFloat {
|
|
308
319
|
if (followPitch >= 0.0) {
|
|
309
320
|
_camera.pitch = followPitch
|
|
@@ -317,14 +328,29 @@ class RCTMGLCamera : RCTMGLMapComponentBase, LocationConsumer {
|
|
|
317
328
|
} else {
|
|
318
329
|
followOptions.pitch = nil
|
|
319
330
|
}
|
|
320
|
-
|
|
321
|
-
if let
|
|
322
|
-
if (
|
|
323
|
-
_camera.
|
|
324
|
-
followOptions.zoom = zoom
|
|
331
|
+
|
|
332
|
+
if let followHeading = self.followHeading as? CGFloat {
|
|
333
|
+
if (followHeading >= 0.0) {
|
|
334
|
+
_camera.bearing = followHeading
|
|
325
335
|
}
|
|
336
|
+
} else if let stopHeading = self.stop?["heading"] as? CGFloat {
|
|
337
|
+
if (stopHeading >= 0.0) {
|
|
338
|
+
_camera.bearing = stopHeading
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if let padding = self.followPadding {
|
|
343
|
+
let edgeInsets = UIEdgeInsets(
|
|
344
|
+
top: padding["paddingTop"] as? Double ?? 0,
|
|
345
|
+
left: padding["paddingLeft"] as? Double ?? 0,
|
|
346
|
+
bottom: padding["paddingBottom"] as? Double ?? 0,
|
|
347
|
+
right: padding["paddingRight"] as? Double ?? 0
|
|
348
|
+
)
|
|
349
|
+
followOptions.padding = edgeInsets
|
|
326
350
|
}
|
|
351
|
+
|
|
327
352
|
let followState = map.viewport.makeFollowPuckViewportState(options: followOptions)
|
|
353
|
+
|
|
328
354
|
map.viewport.transition(to: followState)
|
|
329
355
|
map.viewport.addStatusObserver(self)
|
|
330
356
|
map.mapboxMap.setCamera(to: _camera)
|
|
@@ -8,11 +8,14 @@ RCT_EXPORT_VIEW_PROPERTY(maxBounds, NSString)
|
|
|
8
8
|
RCT_EXPORT_VIEW_PROPERTY(animationDuration, NSNumber)
|
|
9
9
|
RCT_EXPORT_VIEW_PROPERTY(animationMode, NSString)
|
|
10
10
|
RCT_EXPORT_VIEW_PROPERTY(defaultStop, NSDictionary)
|
|
11
|
-
|
|
12
|
-
RCT_EXPORT_VIEW_PROPERTY(followPitch, NSNumber)
|
|
11
|
+
|
|
13
12
|
RCT_EXPORT_VIEW_PROPERTY(followUserLocation, BOOL)
|
|
14
13
|
RCT_EXPORT_VIEW_PROPERTY(followUserMode, NSString)
|
|
15
14
|
RCT_EXPORT_VIEW_PROPERTY(followZoomLevel, NSNumber)
|
|
15
|
+
RCT_EXPORT_VIEW_PROPERTY(followPitch, NSNumber)
|
|
16
|
+
RCT_EXPORT_VIEW_PROPERTY(followHeading, NSNumber)
|
|
17
|
+
RCT_EXPORT_VIEW_PROPERTY(followPadding, NSDictionary)
|
|
18
|
+
|
|
16
19
|
RCT_EXPORT_VIEW_PROPERTY(maxZoomLevel, NSNumber)
|
|
17
20
|
RCT_EXPORT_VIEW_PROPERTY(minZoomLevel, NSNumber)
|
|
18
21
|
RCT_EXPORT_VIEW_PROPERTY(onUserTrackingModeChange, RCTBubblingEventBlock)
|
|
@@ -1,18 +1,50 @@
|
|
|
1
1
|
import MapboxMaps
|
|
2
2
|
|
|
3
|
+
protocol RCTMGLImageSetter : AnyObject {
|
|
4
|
+
func addImage(name: String, image: UIImage, sdf: Bool?, stretchX: [[NSNumber]], stretchY: [[NSNumber]], log: String) -> Bool
|
|
5
|
+
}
|
|
6
|
+
|
|
3
7
|
class RCTMGLImages : UIView, RCTMGLMapComponent {
|
|
4
8
|
|
|
5
9
|
weak var bridge : RCTBridge! = nil
|
|
6
10
|
var remoteImages : [String:String] = [:]
|
|
7
11
|
|
|
12
|
+
weak var style: Style? = nil
|
|
13
|
+
|
|
8
14
|
@objc
|
|
9
15
|
var onImageMissing: RCTBubblingEventBlock? = nil
|
|
10
16
|
|
|
11
17
|
@objc
|
|
12
18
|
var images : [String:Any] = [:]
|
|
13
19
|
|
|
20
|
+
var imageViews: [RCTMGLImage] = []
|
|
21
|
+
|
|
14
22
|
@objc
|
|
15
|
-
var nativeImages: [
|
|
23
|
+
var nativeImages: [Any] = [] {
|
|
24
|
+
didSet {
|
|
25
|
+
nativeImageInfos = nativeImages.compactMap { decodeImage($0) }
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
typealias NativeImageInfo = (name:String, sdf: Bool, stretchX:[(from:Float, to:Float)], stretchY:[(from:Float, to:Float)]);
|
|
30
|
+
var nativeImageInfos: [NativeImageInfo] = []
|
|
31
|
+
|
|
32
|
+
@objc open override func insertReactSubview(_ subview: UIView!, at atIndex: Int) {
|
|
33
|
+
if let image = subview as? RCTMGLImage {
|
|
34
|
+
imageViews.insert(image, at: atIndex)
|
|
35
|
+
} else {
|
|
36
|
+
Logger.log(level:.warn, message: "RCTMGLImages children can only be RCTMGLImage, got \(optional: subview)")
|
|
37
|
+
}
|
|
38
|
+
super.insertReactSubview(subview, at: atIndex)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@objc open override func removeReactSubview(_ subview: UIView!) {
|
|
42
|
+
if let image = subview as? RCTMGLImage {
|
|
43
|
+
imageViews.removeAll { $0 == image }
|
|
44
|
+
image.images = nil
|
|
45
|
+
}
|
|
46
|
+
super.removeReactSubview(subview)
|
|
47
|
+
}
|
|
16
48
|
|
|
17
49
|
// MARK: - RCTMGLMapComponent
|
|
18
50
|
|
|
@@ -21,14 +53,17 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
|
|
|
21
53
|
}
|
|
22
54
|
|
|
23
55
|
func addToMap(_ map: RCTMGLMapView, style: Style) {
|
|
56
|
+
self.style = style
|
|
24
57
|
map.images.append(self)
|
|
25
58
|
map.setupEvents()
|
|
26
59
|
|
|
27
|
-
self.addNativeImages(style: style, nativeImages:
|
|
60
|
+
self.addNativeImages(style: style, nativeImages: nativeImageInfos)
|
|
28
61
|
self.addRemoteImages(style: style, remoteImages: images)
|
|
62
|
+
self.addImageViews(style: style, imageViews: imageViews)
|
|
29
63
|
}
|
|
30
64
|
|
|
31
65
|
func removeFromMap(_ map: RCTMGLMapView) {
|
|
66
|
+
self.style = nil
|
|
32
67
|
// v10todo
|
|
33
68
|
}
|
|
34
69
|
|
|
@@ -56,9 +91,15 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
|
|
|
56
91
|
}
|
|
57
92
|
}
|
|
58
93
|
|
|
94
|
+
private func addImageViews(style: Style, imageViews: [RCTMGLImage]) {
|
|
95
|
+
imageViews.forEach { imageView in
|
|
96
|
+
imageView.images = self
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
59
100
|
public func addMissingImageToStyle(style: Style, imageName: String) -> Bool {
|
|
60
|
-
if
|
|
61
|
-
addNativeImages(style: style, nativeImages: [
|
|
101
|
+
if let nativeImage = nativeImageInfos.first(where: { $0.name == imageName }) {
|
|
102
|
+
addNativeImages(style: style, nativeImages: [nativeImage])
|
|
62
103
|
return true
|
|
63
104
|
}
|
|
64
105
|
|
|
@@ -77,11 +118,57 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
|
|
|
77
118
|
}
|
|
78
119
|
}
|
|
79
120
|
|
|
80
|
-
func
|
|
81
|
-
|
|
82
|
-
|
|
121
|
+
func convert(stretch: [[NSNumber]]) -> [(from: Float, to: Float)] {
|
|
122
|
+
return stretch.map{ pair in
|
|
123
|
+
return (from: pair[0].floatValue, to: pair[1].floatValue)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
func convert(stretch: [(from: Float, to: Float)]) -> [ImageStretches] {
|
|
128
|
+
return stretch.map { v in ImageStretches(first: v.from, second: v.to) }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
func decodeImage(_ imageNameOrInfo: Any) -> NativeImageInfo? {
|
|
132
|
+
if let imageName = imageNameOrInfo as? String {
|
|
133
|
+
return (name: imageName, sdf: false, stretchX:[],stretchY:[])
|
|
134
|
+
} else if let imageInfo = imageNameOrInfo as? [String:Any] {
|
|
135
|
+
guard let name = imageInfo["name"] as? String else {
|
|
136
|
+
Logger.log(level: .warn, message: "NativeImage: \(imageInfo) has no name key")
|
|
137
|
+
return nil
|
|
138
|
+
}
|
|
139
|
+
var sdf = false
|
|
140
|
+
var stretchX : [(from:Float, to:Float)] = []
|
|
141
|
+
var stretchY : [(from:Float, to:Float)] = []
|
|
142
|
+
if let sdfV = imageInfo["sdf"] as? NSNumber {
|
|
143
|
+
sdf = sdfV.boolValue
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if let stretchXV = imageInfo["stretchX"] as? [[NSNumber]] {
|
|
147
|
+
stretchX = convert(stretch: stretchXV)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if let stretchYV = imageInfo["stretchY"] as? [[NSNumber]] {
|
|
151
|
+
stretchY = convert(stretch: stretchYV)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return (name: name, sdf: sdf, stretchX: stretchX, stretchY: stretchY)
|
|
155
|
+
} else {
|
|
156
|
+
Logger.log(level: .warn, message: "RCTMGLImage.nativeImage, unexpected image: \(imageNameOrInfo)")
|
|
157
|
+
return nil
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
func addNativeImages(style: Style, nativeImages: [NativeImageInfo]) {
|
|
162
|
+
for imageInfo in nativeImages {
|
|
163
|
+
let imageName = imageInfo.name
|
|
164
|
+
if style.styleManager.getStyleImage(forImageId: imageInfo.name) == nil {
|
|
83
165
|
if let image = UIImage(named: imageName) {
|
|
84
|
-
|
|
166
|
+
logged("RCTMGLImage.addNativeImage: \(imageName)") {
|
|
167
|
+
try style.addImage(image, id: imageName, sdf: imageInfo.sdf,
|
|
168
|
+
stretchX: convert(stretch: imageInfo.stretchX),
|
|
169
|
+
stretchY: convert(stretch: imageInfo.stretchY)
|
|
170
|
+
)
|
|
171
|
+
}
|
|
85
172
|
} else {
|
|
86
173
|
Logger.log(level:.error, message: "Cannot find nativeImage named \(imageName)")
|
|
87
174
|
}
|
|
@@ -95,5 +182,23 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
|
|
|
95
182
|
UIGraphicsEndImageContext()
|
|
96
183
|
return result
|
|
97
184
|
}()
|
|
185
|
+
}
|
|
98
186
|
|
|
187
|
+
extension RCTMGLImages : RCTMGLImageSetter {
|
|
188
|
+
func addImage(name: String, image: UIImage, sdf: Bool?, stretchX: [[NSNumber]], stretchY: [[NSNumber]], log: String) -> Bool
|
|
189
|
+
{
|
|
190
|
+
return logged("\(log).addImage") {
|
|
191
|
+
if let style = style {
|
|
192
|
+
try style.addImage(image,
|
|
193
|
+
id:name,
|
|
194
|
+
sdf: sdf ?? false,
|
|
195
|
+
stretchX: convert(stretch: convert(stretch: stretchX)),
|
|
196
|
+
stretchY: convert(stretch: convert(stretch: stretchY))
|
|
197
|
+
)
|
|
198
|
+
return true
|
|
199
|
+
} else {
|
|
200
|
+
return false
|
|
201
|
+
}
|
|
202
|
+
} ?? false
|
|
203
|
+
}
|
|
99
204
|
}
|
package/ios/install.md
CHANGED
|
@@ -60,7 +60,7 @@ You can also override the version to use. *Warning:* if you set a version, then
|
|
|
60
60
|
|
|
61
61
|
```ruby
|
|
62
62
|
# Warning: only for advanced use cases, only do this if you know what you're doing.
|
|
63
|
-
# $RNMapboxMapsVersion = '~> 10.
|
|
63
|
+
# $RNMapboxMapsVersion = '~> 10.12.0'
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
You will need to authorize your download of the Maps SDK with a secret access token with the `DOWNLOADS:READ` scope. This [guide](https://docs.mapbox.com/ios/maps/guides/install/#configure-credentials) explains how to configure the secret token under section `Configure your secret token`.
|
|
@@ -122,16 +122,18 @@ export type CameraStop = {
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export type CameraFollowConfig = {
|
|
125
|
-
/** The mode used to track the user location on the map. */
|
|
126
|
-
followUserMode?: UserTrackingMode;
|
|
127
125
|
/** Whether the map orientation follows the user location. */
|
|
128
126
|
followUserLocation?: boolean;
|
|
127
|
+
/** The mode used to track the user location on the map. */
|
|
128
|
+
followUserMode?: UserTrackingMode;
|
|
129
129
|
/** The zoom level used when following the user location. */
|
|
130
130
|
followZoomLevel?: number;
|
|
131
131
|
/** The pitch used when following the user location. */
|
|
132
132
|
followPitch?: number;
|
|
133
133
|
/** The heading used when following the user location. */
|
|
134
134
|
followHeading?: number;
|
|
135
|
+
/** The padding used to position the user location when following. */
|
|
136
|
+
followPadding?: Partial<CameraPadding>;
|
|
135
137
|
};
|
|
136
138
|
|
|
137
139
|
export type CameraMinMaxConfig = {
|
|
@@ -232,6 +234,7 @@ export const Camera = memo(
|
|
|
232
234
|
followZoomLevel,
|
|
233
235
|
followPitch,
|
|
234
236
|
followHeading,
|
|
237
|
+
followPadding,
|
|
235
238
|
defaultSettings,
|
|
236
239
|
allowUpdates = true,
|
|
237
240
|
onUserTrackingModeChange,
|
|
@@ -526,9 +529,10 @@ export const Camera = memo(
|
|
|
526
529
|
defaultStop={nativeDefaultStop}
|
|
527
530
|
followUserLocation={followUserLocation}
|
|
528
531
|
followUserMode={followUserMode}
|
|
532
|
+
followZoomLevel={followZoomLevel}
|
|
529
533
|
followPitch={followPitch}
|
|
530
534
|
followHeading={followHeading}
|
|
531
|
-
|
|
535
|
+
followPadding={followPadding}
|
|
532
536
|
minZoomLevel={minZoomLevel}
|
|
533
537
|
maxZoomLevel={maxZoomLevel}
|
|
534
538
|
maxBounds={nativeMaxBounds}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React, { memo, forwardRef, ReactElement } from 'react';
|
|
2
|
+
import { requireNativeComponent } from 'react-native';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
/** Image name */
|
|
6
|
+
name: string;
|
|
7
|
+
|
|
8
|
+
/** Make image an sdf optional - see [SDF icons](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/) */
|
|
9
|
+
sdf?: boolean;
|
|
10
|
+
|
|
11
|
+
/** stretch along x axis - optional */
|
|
12
|
+
stretchX?: [number, number][];
|
|
13
|
+
|
|
14
|
+
/** stretch along y axis - optional */
|
|
15
|
+
stretchY?: [number, number][];
|
|
16
|
+
|
|
17
|
+
/** Single react native view generating the image */
|
|
18
|
+
children: ReactElement;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface Ref {
|
|
22
|
+
refresh: () => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const Image = memo(
|
|
26
|
+
forwardRef<Ref, Props>(function Image(
|
|
27
|
+
{ name, sdf, stretchX, stretchY, children }: Props,
|
|
28
|
+
ref: React.ForwardedRef<Ref>,
|
|
29
|
+
) {
|
|
30
|
+
const nativeProps = {
|
|
31
|
+
name,
|
|
32
|
+
sdf,
|
|
33
|
+
stretchX,
|
|
34
|
+
stretchY,
|
|
35
|
+
children,
|
|
36
|
+
};
|
|
37
|
+
return <RCTMGLImage {...nativeProps} />;
|
|
38
|
+
}),
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
interface NativeProps {
|
|
42
|
+
name: string;
|
|
43
|
+
children: ReactElement;
|
|
44
|
+
sdf?: boolean;
|
|
45
|
+
stretchX?: [number, number][];
|
|
46
|
+
stretchY?: [number, number][];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const NATIVE_MODULE_NAME = 'RCTMGLImage';
|
|
50
|
+
|
|
51
|
+
const RCTMGLImage = requireNativeComponent<NativeProps>(NATIVE_MODULE_NAME);
|
|
52
|
+
|
|
53
|
+
Image.displayName = 'Image';
|
|
54
|
+
|
|
55
|
+
export default Image;
|