| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // MapAnnotationView.swift
- // Runner
- //
- // Created by Groot on 2025/5/9.
- //
- import UIKit
- import MapKit
- class MapAnnotationView: MKAnnotationView {
-
- static let identifier: String = "MapAnnotationView"
- var marker: ATMapMarker?
- private let imageView = UIImageView()
-
- override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
- super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
- self.marker = annotation as? ATMapMarker
-
- // 确保视图可见
- self.canShowCallout = false
- self.isEnabled = true
- self.isHidden = false
-
- setupImageView()
- }
- required init?(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- private func setupImageView() {
- // 设置默认图像
- let defaultImage = UIImage()
- imageView.image = defaultImage
- imageView.contentMode = .scaleAspectFit
-
- // 添加图像视图到注释视图
- addSubview(imageView)
-
- // 设置图像视图的大小和位置
- imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
-
- // 设置注释视图的大小
- self.frame = imageView.frame
-
- // 设置注释视图的中心点偏移
- self.centerOffset = CGPoint(x: 0, y: -imageView.frame.height / 2)
- }
-
- override func prepareForDisplay() {
- super.prepareForDisplay()
-
- // 根据标记状态更新图像
- updateImage()
- }
-
- private func updateImage() {
- // 使用已有的图像资源,而不是不存在的 marker_selected 和 marker_default
- let defaultImage = UIImage()
- imageView.image = defaultImage
-
- // 如果被选中,可以修改图像视图的外观
- if let isSelected = marker?.isSelected, isSelected {
- imageView.layer.borderWidth = 2.0
- imageView.layer.borderColor = UIColor.blue.cgColor
- imageView.layer.cornerRadius = imageView.frame.width / 2
- } else {
- imageView.layer.borderWidth = 0
- }
- }
- override func setSelected(_ selected: Bool, animated: Bool) {
- super.setSelected(selected, animated: animated)
- if selected {
- self.marker?.isSelected = true
- } else {
- self.marker?.isSelected = false
- }
-
- // 更新图像以反映选中状态
- updateImage()
- }
- }
|