MapAmapTheStyleOfAnnection.swift 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //
  2. // MapAmapTheStyleOfAnnection.swift
  3. // map_amap_ios
  4. //
  5. // Created by 诺诺诺的言 on 2025/7/22.
  6. //
  7. import Foundation
  8. protocol MapMarkerSupportType: Codable {
  9. var rawValue: Int { get }
  10. var supportSelected: Bool { get }
  11. func imageName(selected: Bool) -> String
  12. var size: CGSize { get }
  13. var isMapAchorPoint : Bool {get}
  14. var isTracePopup : Bool {get}
  15. var markType : MapMarkerSupportType {get}
  16. var isTracePassing : Bool {get}
  17. }
  18. // 创建一个全局辅助类来处理解码/编码
  19. struct MarkerTypeFactory {
  20. static func markerType(from rawValue: Int) -> any MapMarkerSupportType {
  21. // 根据应用包类型选择正确的枚举类型
  22. switch currentPackage {
  23. case .traceLocation1:
  24. return MarkerType(rawValue: rawValue) ?? MarkerType.mine
  25. // 如果有更多包类型,可以在这里添加
  26. }
  27. }
  28. }
  29. // 为MapMarkerSupportType添加Codable实现
  30. extension MapMarkerSupportType {
  31. // 编码为整数
  32. func encode(to encoder: Encoder) throws {
  33. var container = encoder.singleValueContainer()
  34. try container.encode(rawValue)
  35. }
  36. }
  37. // 第一个包的标记类型
  38. enum MarkerType: Int, MapMarkerSupportType {
  39. case mine = 1
  40. case friend = 2
  41. case traceStart = 3
  42. case traceEndFriend = 4
  43. case traceEndMine = 5
  44. case tracePopup = 6 //popup气泡样式
  45. case tracePassing = 7 //轨迹途径点样式
  46. case trackError = 8 //轨迹错误点样式
  47. var supportSelected: Bool {
  48. return self == .mine
  49. }
  50. func imageName(selected: Bool) -> String {
  51. let prefixName: String = currentPackage.rawValue
  52. let imageBaseName: String = switch self {
  53. case .mine:
  54. "mine"
  55. case .friend:
  56. "friend"
  57. case .traceStart:
  58. "traceStart"
  59. case .traceEndFriend:
  60. "traceEndFriend"
  61. case .traceEndMine:
  62. "traceEndMine"
  63. case .tracePopup:
  64. "tracePopup"
  65. case .tracePassing:
  66. "tracePassing"
  67. case .trackError:
  68. "trackError"
  69. }
  70. return "\(prefixName)_\(imageBaseName)" + ((selected && supportSelected) ? "_selected" : "")
  71. }
  72. var size: CGSize {
  73. switch self {
  74. case .traceStart:
  75. return CGSize(width: 22, height: 36)
  76. default:
  77. return CGSize(width: 44, height: 52)
  78. }
  79. }
  80. var isMapAchorPoint : Bool {
  81. return self == .tracePassing || self == .trackError
  82. }
  83. var markType: MapMarkerSupportType {
  84. return self
  85. }
  86. var isTracePassing : Bool {
  87. return self == .tracePassing
  88. }
  89. var isTracePopup : Bool {
  90. return self == .tracePopup
  91. }
  92. }