Я пытаюсь дать пользователю возможность ввести адрес и увеличить масштаб карты, который работает.Возможно ли иметь перетаскиваемые аннотации в Swift при использовании MapKit
Я хотел бы разрешить пользователю перетаскивать штырь в другое место, затем взять информацию о местоположении и использовать его для чего угодно.
Я пробовал, и я пробовал, но большинство из них, с которыми я могу работать, меняет фактический контакт на пользовательское изображение. Я прошел несколько сообщений и учебников (все для Objective-c), и даже после преобразования кода я все еще не могу заставить это работать.
Мой заказ вид аннотация:
import Foundation
import MapKit
class CustomAnnotationView: MKAnnotationView {
var coordinate:CLLocationCoordinate2D!
init(coordinate:CLLocationCoordinate2D) {
super.init()
self.coordinate = coordinate
}
override init(frame: CGRect) {
super.init(frame: CGRect())
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(annotation: MKAnnotation!, reuseIdentifier: String!) {
super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
image = UIImage(named: "pin")
draggable = true
canShowCallout = true
}
func setCoordinate(newCoordinate: CLLocationCoordinate2D){
self.coordinate = newCoordinate;
}
}
Мой контроллер, который находится мой MAPview:
import Foundation
import MapKit
class LocationViewController : UIViewController, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var searchField: UITextField!
@IBOutlet weak var addressLabel: UILabel!
@IBOutlet weak var locationInstructions: UITextView!
@IBAction func didTapGoButton(sender: UIButton) {
var geocoder = CLGeocoder()
geocoder.geocodeAddressString(searchField.text, {(placemarks: [AnyObject]!, error: NSError!) -> Void in
if let placemark = placemarks?[0] as? CLPlacemark {
var region = self.mapView.region as MKCoordinateRegion
region.center = placemark.location.coordinate
region.span.longitudeDelta /= 30.0;
region.span.latitudeDelta /= 30.0;
self.mapView.zoomEnabled = true
self.mapView.scrollEnabled = true
self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
self.mapView.setRegion(region, animated: true)
}
})
}
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation.isKindOfClass(MKUserLocation) {
return nil
}
var pin = mapView.dequeueReusableAnnotationViewWithIdentifier("CustomAnnotationView")
if pin == nil {
NSLog("PIN NIL")
pin = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
}
else
{
NSLog("PIN NOT NIL")
pin.annotation = annotation;
}
return pin;
}
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, didChangeDragState newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) {
if newState == MKAnnotationViewDragState.Starting
{
view.dragState = MKAnnotationViewDragState.Dragging
}
else if newState == MKAnnotationViewDragState.Ending || newState == MKAnnotationViewDragState.Canceling
{
view.dragState = MKAnnotationViewDragState.None;
}
}
Что я упускаю?
Я не могу найти примеры Swift, где это было сделано успешно.
Избавьтесь от CustomAnnotationView. Все работает, но одно изменилось. Когда я нажимаю на контакт, он обычно отображает имя области почтового кода, в который я ввел. Однако теперь он отображает, что я набирал в текстовое поле. В любом случае, чтобы отобразить подробную информацию о том, где был выведен штырь? – LondonGuy
Ok messing с pa.title = placemark.locality и т. Д. Помогает. Наверное, я могу объединить несколько строк. Я рассмотрю свои варианты. Спасибо за помощь – LondonGuy