2016-03-18 6 views
0

私はMapKitに苦労しています。マップ上の特定の場所を表示するアプリケーションを開発しています。私は、座標、タイトルとサブタイトルを使用してMKPointAnnotationコードを介してピンを追加することができました。右側にコールアウトボタンを追加して、その場所に関する詳しい情報が表示された画面に移動します。私は努力し続けているが役に立たない。誰でも助けることができますか?MKAnnotationViewとの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. 
    } 
} 

は、これまでのところ、この良いですか?任意のヘルプは、これは私の最初のアプリですので、シンプルな言葉ですばらしいと評価されるだろう!

おかげで、

サム

答えて

0

あなたはこれらのMapViewのデリゲートメソッド

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

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

あなたはMKPinAnnotationViewインスタンスにrightCalloutAccessoryViewを設定することができます。..

を実装する必要があるかもしれません

ここには目的コードのサンプルコードがあります....

- (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; 

    } 
関連する問題