Swift - изображение на заказ MKPointAnnotation

82
10

Я использую Swift 3 и Xcode 10 beta 3, и мне нужно использовать собственный образ для своих контактов на карте. Мне нужно избегать красных контактов аннотации и использовать некоторые пользовательские логотипы, которые я сделал для этого. Я попробовал все решения, найденные в стеке, но мне ничего не помогло. Это мой код:

import UIKit
import MapKit

class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var map: MKMapView!

var locationManager: CLLocationManager!

override func viewDidLoad() {
super.viewDidLoad()
self.locationManager = CLLocationManager()
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startUpdatingLocation()

//let span:MKCoordinateSpan = MKCoordinateSpanMake(0.1, 0.1)
let locationANTOMI:CLLocationCoordinate2D = CLLocationCoordinate2DMake(45.4509339, 9.1713609)
let locationANTOTO:CLLocationCoordinate2D = CLLocationCoordinate2DMake(45.06666, 7.68826)
//let region:MKCoordinateRegion = MKCoordinateRegionMake(location, span)
//map.setRegion(region, animated: true)
let annotationANTOMI = MKPointAnnotation()
annotationANTOMI.coordinate = locationANTOMI
annotationANTOMI.title = "ANTONIOLI MILANO"

map.addAnnotation(annotationANTOMI)

let annotationANTOTO = MKPointAnnotation()
annotationANTOTO.coordinate = locationANTOTO
annotationANTOTO.title = "ANTONIOLI TORINO"
map.addAnnotation(annotationANTOTO)
}
}

Как я должен это делать?

спросил(а) 2018-07-09T01:55:00+03:00 2 года, 3 месяца назад
1
Решение
100

Обычно я делаю это, чтобы создать новый быстрый файл, который будет вашей пользовательской аннотацией, которая наследуется от MKAnnoatation. Пример ниже

import MapKit

class MyAnnotation: NSObject, MKAnnotation {
let title: String?
let subtitle: String?
let coordinate: CLLocationCoordinate2D
var image: UIImage? = nil

init(title: String, subtitle: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.subtitle = subtitle
self.coordinate = coordinate
//self.image
super.init()
}

Вам нужно будет инициализировать аннотацию, где CLCoordinate является обязательным. Затем установите свойство изображения с вашим пользовательским изображением. MyAnnotation.image = "myImage.png". You will then need to add your annotation to your map view MyAnnotation.image = "myImage.png". You will then need to add your annotation to your map view mapView.addAnnotations(MyAnnotation). Я также реализую метод из MKMapViewDelegate (убедитесь, что вы наследуете это в своем классе). Это делается для того, чтобы пользователь мог использовать аннотацию и получать информацию об этом. Надеюсь это поможет.

По вашему мнению, контроллер:

let marker = MyAnnotation(title: "title" as! String, subtitle: "subtitle" as! String, coordinate: CLLocationCoordinate2D(latitude: latitude, longitude: longitude))
marker.image = UIImage("my image.png")
self.mapView.addAnnotations(marker)

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let annotation = annotation as? MyAnnotation {
let identifier = "identifier"
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView?.image = annotation.image //add this
annotationView?.canShowCallout = true
annotationView?.calloutOffset = CGPoint(x: -5, y: 5)
annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure) as UIView
return annotationView
}
return nil
}'

ответил(а) 2018-07-09T02:50:00+03:00 2 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема