|
|
@@ -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)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|