@@ -2,26 +2,16 @@ import Foundation
2
2
@_spi ( Experimental) import MapboxMaps
3
3
import Flutter
4
4
5
- final class GesturesController : NSObject , GesturesSettingsInterface , UIGestureRecognizerDelegate , GestureManagerDelegate {
5
+ final class GesturesController : NSObject , GesturesSettingsInterface , UIGestureRecognizerDelegate {
6
6
7
+ private var cancelables : Set < AnyCancelable > = [ ]
7
8
private var onGestureListener : GestureListener ?
9
+ private let mapView : MapView
8
10
9
- func gestureManager( _ gestureManager: MapboxMaps . GestureManager , didBegin gestureType: MapboxMaps . GestureType ) { }
10
-
11
- func gestureManager( _ gestureManager: MapboxMaps . GestureManager , didEnd gestureType: MapboxMaps . GestureType , willAnimate: Bool ) {
12
- guard gestureType == . singleTap else {
13
- return
14
- }
15
-
16
- let touchPoint = gestureManager. singleTapGestureRecognizer. location ( in: mapView)
17
- let point = Point ( mapView. mapboxMap. coordinate ( for: touchPoint) )
18
- let context = MapContentGestureContext ( touchPosition: touchPoint. toFLTScreenCoordinate ( ) , point: point)
19
-
20
- onGestureListener? . onTap ( context: context, completion: { _ in } )
11
+ init ( withMapView mapView: MapView ) {
12
+ self . mapView = mapView
21
13
}
22
14
23
- func gestureManager( _ gestureManager: MapboxMaps . GestureManager , didEndAnimatingFor gestureType: MapboxMaps . GestureType ) { }
24
-
25
15
@objc private func onMapPan( _ sender: UIPanGestureRecognizer ) {
26
16
guard sender. state == . began || sender. state == . changed || sender. state == . ended else {
27
17
return
@@ -34,16 +24,6 @@ final class GesturesController: NSObject, GesturesSettingsInterface, UIGestureRe
34
24
onGestureListener? . onScroll ( context: context, completion: { _ in } )
35
25
}
36
26
37
- @objc private func onMapLongTap( _ sender: UITapGestureRecognizer ) {
38
- guard sender. state == . ended else { return }
39
-
40
- let touchPoint = sender. location ( in: mapView)
41
- let point = Point ( mapView. mapboxMap. coordinate ( for: touchPoint) )
42
- let context = MapContentGestureContext ( touchPosition: touchPoint. toFLTScreenCoordinate ( ) , point: point)
43
-
44
- onGestureListener? . onLongTap ( context: context, completion: { _ in } )
45
- }
46
-
47
27
func updateSettings( settings: GesturesSettings ) throws {
48
28
if let panEnabled = settings. scrollEnabled {
49
29
mapView. gestures. options. panEnabled = panEnabled
@@ -124,23 +104,23 @@ final class GesturesController: NSObject, GesturesSettingsInterface, UIGestureRe
124
104
125
105
func addListeners( messenger: FlutterBinaryMessenger ) {
126
106
removeListeners ( )
127
- gestureRecognizer = UILongPressGestureRecognizer ( target: self , action: #selector( onMapLongTap) )
128
- mapView. addGestureRecognizer ( gestureRecognizer!)
129
- mapView. gestures. delegate = self
130
- onGestureListener = GestureListener ( binaryMessenger: messenger)
131
107
mapView. gestures. panGestureRecognizer. addTarget ( self , action: #selector( onMapPan) )
132
- }
133
108
134
- func removeListeners( ) {
135
- if let gestureRecognizer = self . gestureRecognizer {
136
- mapView. removeGestureRecognizer ( gestureRecognizer)
109
+ onGestureListener = GestureListener ( binaryMessenger: messenger)
110
+
111
+ mapView. gestures. onMapTap. observe { [ weak self] context in
112
+ guard let self else { return }
113
+ self . onGestureListener? . onTap ( context: context. toFLTMapContentGestureContext ( ) ) { _ in }
114
+ }
115
+ . store ( in: & cancelables)
116
+ mapView. gestures. onMapLongPress. observe { [ weak self] context in
117
+ guard let self else { return }
118
+ self . onGestureListener? . onLongTap ( context: context. toFLTMapContentGestureContext ( ) ) { _ in }
137
119
}
120
+ . store ( in: & cancelables)
138
121
}
139
122
140
- private var mapView : MapView
141
- private var gestureRecognizer : UIGestureRecognizer ?
142
-
143
- init ( withMapView mapView: MapView ) {
144
- self . mapView = mapView
123
+ func removeListeners( ) {
124
+ cancelables = [ ]
145
125
}
146
126
}
0 commit comments