我一直在努力使用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.
}
}
到目前为止这是好事吗?任何帮助将不胜感激,这是我的第一个应用程序,所以简单来说会很棒!
谢谢,
萨姆
答案 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
}