Jelajahi Sumber

add:添加1、禁用或开启地图所有交互 和 显示或隐藏地图logo 功能。

“HeShaoZe” 4 bulan lalu
induk
melakukan
47efb23ae1

+ 11 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Extension/MapKit+E.swift

@@ -124,4 +124,15 @@ extension MKMapView {
         // 使用animate参数控制是否动画过渡
         self.setRegion(self.regionThatFits(region), animated: true)
     }
+    
+    ///是否隐藏地图图标
+    func mapLogoVisible(isHiddenLogo : Bool) {
+        for subview in self.subviews {
+            if let logo = subview as? UIImageView,
+               logo.bounds.size.width <= 100,
+               logo.bounds.size.height <= 20 {
+                logo.isHidden = isHiddenLogo
+            }
+        }
+    }
 }

+ 2 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/ChannelMethods.swift

@@ -17,6 +17,8 @@ enum ChannelMethods: String, CaseIterable {
     case methodMapAnimateCamera = "map#animateCamera" 
     case methodMapClear = "map#clear"
     case methodMapMoveToSuitableLocation = "map#moveToSuitableLocation"
+    case methodMapInteractionEnabled = "map#interactionEnabled"
+    case methodMapLogoVisible = "map#logoVisible"
     
     // 标记物相关方法名称
     case methodUpdateOrAddMarkers = "marker#updateOrAddMarkers"

+ 10 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/MapProtocol.swift

@@ -49,6 +49,12 @@ protocol MapCapability {
     
     ///清除指定标记物
     func handleMapRemovemarker(args: [String: Any]?, result: @escaping FlutterResult)
+    
+    ///禁用或开启地图所有交互
+    func handleMapInteractionEnabled(args: [String: Any]?, result: @escaping FlutterResult)
+    
+    ///显示或隐藏地图logo
+    func handleMapLogoVisible(args: [String: Any]?, result: @escaping FlutterResult)
 }
 
 extension MapCapability {
@@ -75,6 +81,10 @@ extension MapCapability {
             handleMapMoveToSuitableLocation(args: call.arguments as? [String: Any], result: result)
         case .methodMarkerRemoveMarker:
             handleMapRemovemarker(args: call.arguments as? [String: Any], result: result)
+        case .methodMapInteractionEnabled:
+            handleMapInteractionEnabled(args: call.arguments as? [String: Any], result: result)
+        case .methodMapLogoVisible:
+            handleMapLogoVisible(args: call.arguments as? [String: Any], result: result)
         default:
             result(FlutterMethodNotImplemented)
         }

+ 2 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/MapViewChannelMethod.swift

@@ -13,6 +13,8 @@ enum MapViewChannelMethod: String, CaseIterable {
     case methodMapAnimateCamera = "map#animateCamera" 
     case methodMapClear = "map#clear"
     case methodMapMoveToSuitableLocation = "map#moveToSuitableLocation"
+    case methodMapInteractionEnabled = "map#interactionEnabled"
+    case methodMapLogoVisible = "map#logoVisible"
     
     // 标记物相关方法名称
     case methodUpdateOrAddMarkers = "marker#updateOrAddMarkers"

+ 22 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/ViewModel/MapViewModel.swift

@@ -29,6 +29,12 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
     //移动至多个点的位置,并提供设置padding距离
     @Published var suitableLocation: [ATMapPolyline] = []
     
+    ///禁用或开启地图所有交互
+    @Published var interactionEnabled : String = ""
+    
+    /// 显示或隐藏地图logo
+    @Published var logoVisible : String = ""
+    
     // 处理地图移动
     func handleMapMoveCamera(args: [String: Any]?, result: @escaping FlutterResult) {
         guard let args = args, let cameraPosition = ATMapCameraPosition.fromJson(json: args) else {
@@ -139,6 +145,22 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
         }
         result(nil)
     }
+    
+    ///禁用或开启地图所有交互
+    func handleMapInteractionEnabled(args: [String: Any]?, result: @escaping FlutterResult) {
+        if let enabled = args?["enabled"] {
+            self.interactionEnabled = "\(enabled)";
+        }
+        result(nil)
+    }
+    
+    ///显示或隐藏地图logo
+    func handleMapLogoVisible(args: [String : Any]?, result: @escaping FlutterResult) {
+        if let visible = args?["visible"] {
+            self.logoVisible = "\(visible)";
+        }
+        result(nil)
+    }
 }
 
 // Propertie Action