使用MKAnnotationView创建MKPointAnnotation链接

时间:2016-03-18 21:21:10

标签: ios swift

我一直在努力使用MapKit,我正在开发一个在地图上显示某些位置的应用。我已设法使用坐标,标题和副标题通过MKPointAnnotation代码添加引脚。我现在想要在右侧添加标注按钮以转到屏幕,其中包含有关该地点的更多信息。我一直在尝试但无济于事。有人可以帮忙吗?

到目前为止我的代码是:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    @IBOutlet weak var map: MKMapView!

    var locationManager = CLLocationManager()

    class CustomPointAnnotation: MKPointAnnotation {
        var imageName: String!
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Request location

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

            self.map.showsUserLocation = true;

        // Map

        var latitude:CLLocationDegrees = 52.630886
        var longitude:CLLocationDegrees = 1.297355

        var latDelta:CLLocationDegrees = 0.05
        var lonDelta:CLLocationDegrees = 0.05

        var span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)

        var location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)

        var region:MKCoordinateRegion = MKCoordinateRegionMake(location, span)

        map.setRegion(region, animated: true)

        // Castle 52.628599, 1.296355

        var castle = MKPointAnnotation()
        castle.coordinate.latitude = 52.628599
        castle.coordinate.longitude = 1.296355
        castle.title = "Norwich Castle"
        castle.subtitle = "Subtitle..."
        map.addAnnotation(castle)

        // Cathedral 52.631869, 1.300919

        var cathedral = MKPointAnnotation()
        cathedral.coordinate.latitude = 52.631869
        cathedral.coordinate.longitude = 1.300919
        cathedral.title = "Norwich Cathedral"
        cathedral.subtitle = "Subtitle..."
        map.addAnnotation(cathedral)

        // The Guildhall 52.629032, 1.292522

        var guildhall = MKPointAnnotation()
        guildhall.coordinate.latitude = 52.629032
        guildhall.coordinate.longitude = 1.292522
        guildhall.title = "The Guildhall"
        guildhall.subtitle = "Subtitle..."
        map.addAnnotation(guildhall)

        // The Halls 52.631120, 1.295712

        var halls = MKPointAnnotation()
        halls.coordinate.latitude = 52.631120
        halls.coordinate.longitude = 1.295712
        halls.title = "The Halls"
        halls.subtitle = "Subtitle..."
        map.addAnnotation(halls)

        // The Assembly House 52.626867, 1.290733

        var assembly = MKPointAnnotation()
        assembly.coordinate.latitude = 52.626867
        assembly.coordinate.longitude = 1.290733
        assembly.title = "The Assembly House"
        assembly.subtitle = "Subtitle..."
        map.addAnnotation(assembly)

        // Surrey House 52.625162, 1.293919

        var surrey = MKPointAnnotation()
        surrey.coordinate.latitude = 52.625162
        surrey.coordinate.longitude = 1.293919
        surrey.title = "Surrey House"
        surrey.subtitle = "Subtitle..."
        map.addAnnotation(surrey)

        // City Hall 52.628645, 1.291606

        var cityhall = MKPointAnnotation()
        cityhall.coordinate.latitude = 52.628645
        cityhall.coordinate.longitude = 1.291606
        cityhall.title = "City Hall"
        cityhall.subtitle = "Subtitle..."
        map.addAnnotation(cityhall)
    }

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        println(locations)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

到目前为止这是好事吗?任何帮助将不胜感激,这是我的第一个应用程序,所以简单来说会很棒!

谢谢,

萨姆

2 个答案:

答案 0 :(得分:2)

您可以在MKPinAnnotationView实例中设置rightCalloutAccessoryView ..

这是目标c中的示例代码....

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    static NSString *identifier = your_identifier;

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (annotationView == nil) {
    annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
    } else {
    annotationView.annotation = annotation;
    }

    annotationView.enabled = YES;
    annotationView.canShowCallout = YES;
    annotationView.image=[UIImage imageNamed:@"arrest.png"];//here we use a nice image instead of the default pins


    //set right CalloutAccessoryView
    annotationView.rightCalloutAccessoryView =  UIButton.buttonWithType(buttonType: UIButtonTypeDetailDisclosure)

    return annotationView;

    }

答案 1 :(得分:0)

您可能需要实现这些mapview委托方法

func mapView(_ mapView: MKMapView,
viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?
{
  return annotationView
}

func mapView(_ mapView: MKMapView,
           annotationView view: MKAnnotationView,calloutAccessoryControlTapped control: UIControl)
{
     // your action 
}