現在、私はピンと地図上に表示されている5つのハードコードの位置を設定し、マップビューを持っています。ユーザーがこれらのピンをクリックすると、位置の詳細を示すコールアウトがユーザーに表示されます。これらの吹き出し内では、ユーザーが押すことができるボタンを含めようとしていて、別のビューコントローラーにそれらを移動します。以下はのiOS - スウィフトMapKit
私が持っている現在のコードでは、しかし、私は何のボタンが表示されていないピンをタップしたときに、誰もが私が行方不明です何か私はボタンを実装するために何をする必要があるか任意のアイデアを持っているんですか?
はここの場所と現在のユーザーの場所のための私のコードです。
import UIKit
import MapKit
import CoreLocation
import SceneKit
class SecondViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
{
@IBOutlet weak var mapView: MKMapView!
//Location manager property
let locationManager = CLLocationManager()
override func viewDidLoad()
{
super.viewDidLoad()
mapView.delegate = self
//Find the current location as soon as the view is loaded
self.locationManager.delegate = self
//Setting the accuracy
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
//So only location services are used within the app
self.locationManager.requestWhenInUseAuthorization()
//Start up the location manager and find current location
self.locationManager.startUpdatingLocation()
//Use blue pin to show the location to the user
self.mapView.showsUserLocation = true
//Array of dictionaries to store the locations
let locationData = [
//Radio City Tower
["name": "Radio City Tower",
"latitude": 53.4071551,
"longitude": -2.980798600000071],
//Metropolitian Cathedral
["name": "Metropolitian Catherdral",
"latitude": 53.40494649999999,
"longitude": -2.9684022999999797],
//Walker Art Gallery
["name": "Walker Art Gallery",
"latitude": 53.410068,
"longitude": -2.979666],
//Liver Buildings
["name": "Liver Buildings",
"latitude": 53.405808,
"longitude": -2.995859],
//St George's Hall
["name": "St George's Hall",
"latitude": 53.409277,
"longitude": -2.979946]
]
//Object for each dictionary in the locations array
var annotations = [MKPointAnnotation]()
//Populating the map with the location pins
for Dictionary in locationData {
let latitude = CLLocationDegrees(Dictionary["latitude"] as! Double)
let longitude = CLLocationDegrees(Dictionary["longitude"] as! Double)
let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
let name = Dictionary["name"] as! String
let annotation = MKPointAnnotation()
//Apply to annotation
annotation.coordinate = coordinate
annotation.title = "\(name)"
annotations.append(annotation)
}
mapView.addAnnotations(annotations)
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Location Delegate Methods
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
//Gets the most current location
let location = locations.last
//gets the center of the last location
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
//Creatng a region - Map will zoom to this
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: Double(0.004), longitudeDelta: Double(0.004)))
//Apply the map view to the region
self.mapView.setRegion(region, animated: true)
//Stop updating the location
self.locationManager.stopUpdatingLocation()
let currentLocation = CLLocationCoordinate2DMake(location!.coordinate.latitude, location!.coordinate.longitude)
//Adding an annotation to current user location
var pinAnnotation = MKPointAnnotation()
//Set pin coordinate to the users current location
pinAnnotation.coordinate = currentLocation
//Annotation title
pinAnnotation.title = "Current Location"
//Annotation subtitle
pinAnnotation.subtitle = "You are here!"
//Add the pin to the mapView
mapView.addAnnotation(pinAnnotation)
}
そして、ここで吹き出し内のボタンを実装するためのコードである(動作しない)
func MapView(mapview: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryTapped control: UIControl!) {
if control == view.rightCalloutAccessoryView {
print(view.annotation?.title)
print(view.annotation?.subtitle)
//Perform segue to navigate to viewcontroller
}
}
func MapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
print("viewForAnnotation")
if(annotation is MKUserLocation) {
return nil
}
let reuseID = "pin"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView
if(pinView == nil) {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
}
var button = UIButton(type: .DetailDisclosure) as UIButton
pinView?.rightCalloutAccessoryView = button
return pinView
}
私はおそらく、本当に簡単に何かをしないのですが、私はわかりませんよ。私はiOS/Swift開発とMapKitには非常に新しいので、私に同行してください。私はまた、この質問が複数回尋ねられていることを理解していますが、まだ解決できません。どんな助けでもありがとうございます。
この関連記事をチェックしてください。..> http://stackoverflow.com/questions/28225296/how-to-add-a-button-to-mkpointannotation – HowsThatMonkey
こんにちは、私はすでにこのポストを使用して統合されています私のアプリケーションにコードを追加し、必要な変更を加えました。私はそれを感謝するコメントありがとうございます。 – starrybolt