Я новичок в быстром программировании и пытаюсь создать приложение, которое показывает какой-нибудь значок на карте. Когда пользователь нажимает на булавку, появляется аннотация с кнопкой. Если кнопка нажата, она откроет URL в Safari.
После некоторого урока мне удалось создать функциональное приложение с пин-кодом и кнопкой, но мне не удалось открыть URL.
Этот код я использую для создания приложения:
struct WebCam {
var name: String
var latitude: CLLocationDegrees
var longitude: CLLocationDegrees
var url: String
}
class FirstViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
let webcams = [WebCam(name: "WH1", latitude: 51.5549, longitude: -0.108436, url: "www.test.it"),
WebCam(name: "WH2", latitude: 51.4816, longitude: -0.191034, url: "www.google.it")]
func fetchWebcamsOnMap(_ webcams: [WebCam]) {
for webcam in webcams {
let annotations = MKPointAnnotation()
annotations.title = webcam.name
annotations.coordinate = CLLocationCoordinate2D(latitude: webcam.latitude, longitude: webcam.longitude)
mapView.addAnnotation(annotations)
}
}
extension FirstViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotations: MKAnnotation) ->
MKAnnotationView? {
let identifier = "WebCam"
var view: MKMarkerAnnotationView
// 4
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
as? MKMarkerAnnotationView {
dequeuedView.annotation = annotations
view = dequeuedView
} else {
// 5
view = MKMarkerAnnotationView(annotation: annotations, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 5)
let mapsButton = UIButton(frame: CGRect(origin: CGPoint.zero,
size: CGSize(width: 30, height: 30)))
mapsButton.setBackgroundImage(UIImage(named: "webcam"), for: UIControl.State())
view.rightCalloutAccessoryView = mapsButton
}
return view
}
И это код для извлечения кнопки UIButton
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if control == view.rightCalloutAccessoryView {
}
}
Я попытался распечатать простую консоль с URL-адресом выбранной веб-камеры, обратившись к ней с помощью
let web = view.annotation as! WebCam
let webURL = WebCam.url
но это показывает ошибку.