Groot il y a 6 mois
Parent
commit
a9cb348d8d

+ 78 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/MapMarkerSupportType.swift

@@ -0,0 +1,78 @@
+//
+//  MapMarkerSupportType.swift
+//  Pods
+//
+//  Created by Groot on 2025/5/14.
+//
+
+
+import Foundation
+
+protocol MapMarkerSupportType: Codable {
+    var rawValue: Int { get }
+
+    var supportSelected: Bool { get }
+
+    func imageName(selected: Bool) -> String
+
+    var size: CGSize { get }
+}
+
+// 创建一个全局辅助类来处理解码/编码
+struct MarkerTypeFactory {
+    static func markerType(from rawValue: Int) -> any MapMarkerSupportType {
+        // 根据应用包类型选择正确的枚举类型
+        switch currentPackage {
+        case .traceLocation1:
+            return MarkerType(rawValue: rawValue) ?? MarkerType.mine
+        // 如果有更多包类型,可以在这里添加
+        }
+    }
+}
+
+// 为MapMarkerSupportType添加Codable实现
+extension MapMarkerSupportType {
+    // 编码为整数
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encode(rawValue)
+    }
+}
+
+// 第一个包的标记类型
+enum MarkerType: Int, MapMarkerSupportType {
+    case mine = 1
+    case friend = 2
+    case traceStart = 3
+    case traceEndFriend = 4
+    case traceEndMine = 5
+    
+    var supportSelected: Bool {
+        return self == .mine || self == .friend
+    }
+    func imageName(selected: Bool) -> String {
+        let prefixName: String = currentPackage.rawValue
+        let imageBaseName: String = switch self {
+            case .mine:
+                "mine"
+            case .friend:
+                "friend"
+            case .traceStart:
+                "traceStart"
+            case .traceEndFriend:
+                "traceEndFriend"
+            case .traceEndMine:
+                "traceEndMine"
+        }
+        return "\(prefixName)_\(imageBaseName)" + ((selected && supportSelected) ? "_selected" : "")
+    }
+
+    var size: CGSize {
+        switch self {
+            case .traceStart:
+                return CGSize(width: 22, height: 36)
+            default:
+                return CGSize(width: 44, height: 52)
+        }
+    }
+}