MapAnnotationView.swift 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // MapAnnotationView.swift
  3. // Runner
  4. //
  5. // Created by Groot on 2025/5/9.
  6. //
  7. import UIKit
  8. import MapKit
  9. class MapAnnotationView: MKAnnotationView {
  10. static let identifier: String = "MapAnnotationView"
  11. var marker: ATMapMarker?
  12. private let imageView = UIImageView()
  13. override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
  14. super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
  15. self.marker = annotation as? ATMapMarker
  16. // 确保视图可见
  17. self.canShowCallout = false
  18. self.isEnabled = true
  19. self.isHidden = false
  20. setupImageView()
  21. }
  22. required init?(coder aDecoder: NSCoder) {
  23. fatalError("init(coder:) has not been implemented")
  24. }
  25. private func setupImageView() {
  26. // 设置默认图像
  27. let defaultImage = UIImage()
  28. imageView.image = defaultImage
  29. imageView.contentMode = .scaleAspectFit
  30. // 添加图像视图到注释视图
  31. addSubview(imageView)
  32. // 设置图像视图的大小和位置
  33. imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
  34. // 设置注释视图的大小
  35. self.frame = imageView.frame
  36. // 设置注释视图的中心点偏移
  37. self.centerOffset = CGPoint(x: 0, y: -imageView.frame.height / 2)
  38. }
  39. override func prepareForDisplay() {
  40. super.prepareForDisplay()
  41. // 根据标记状态更新图像
  42. updateImage()
  43. }
  44. private func updateImage() {
  45. // 使用已有的图像资源,而不是不存在的 marker_selected 和 marker_default
  46. let defaultImage = UIImage()
  47. imageView.image = defaultImage
  48. // 如果被选中,可以修改图像视图的外观
  49. if let isSelected = marker?.isSelected, isSelected {
  50. imageView.layer.borderWidth = 2.0
  51. imageView.layer.borderColor = UIColor.blue.cgColor
  52. imageView.layer.cornerRadius = imageView.frame.width / 2
  53. } else {
  54. imageView.layer.borderWidth = 0
  55. }
  56. }
  57. override func setSelected(_ selected: Bool, animated: Bool) {
  58. super.setSelected(selected, animated: animated)
  59. if selected {
  60. self.marker?.isSelected = true
  61. } else {
  62. self.marker?.isSelected = false
  63. }
  64. // 更新图像以反映选中状态
  65. updateImage()
  66. }
  67. }