2016-03-18 17 views
0

MapKit ile uğraşıyordum, bir harita üzerinde belirli yerleri görüntüleyen bir uygulama geliştiriyorum. Koordinatları, başlığı ve altyazısını kullanarak MKPointAnnotation koduyla pimleri eklemeyi başardım. Şimdi yer hakkında daha fazla bilgi içeren bir ekrana gitmek için sağ taraftaki ek bilgi düğmesini eklemek istiyorum. Denemeye devam ediyorum ama boşuna. Herhangi biri yardım edebilir mi?MKAnnotationView ile MKPointAnnotation bağlantısı oluşturma

Kodum şimdiye kadar geçerli:

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. 
    } 
} 

şimdiye kadar bu iyi midir? Herhangi bir yardım takdir edilecektir, bu benim ilk uygulama bu yüzden basit terimlerle harika olurdu!

sayesinde

Sam

cevap

0

Bu mapview temsilci yöntemleri

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

ve

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

Sen MKPinAnnotationView örneğinde rightCalloutAccessoryView ayarlayabilirsiniz ..

uygulamak gerekebilir

Burada örnek kod örneği mf'dir.

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

    } 
İlgili konular