我一直在与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.
    }
}

到目前为止还不错吗?任何帮助将不胜感激,这是我的第一个应用程序,所以简单地说将是伟大的!
谢谢,
山姆

最佳答案

可以在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;

    }

关于ios - 使用MKAnnotationView制作MKPointAnnotation链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36094442/

10-09 06:56