2016-07-26 6 views
1

У меня есть базовая настройка карты, на мой взгляд, я стараюсь, чтобы штифты оживляли падение ... Так же, как когда вы нажимаете &, удерживайте в приложении для карт, а штифт падает до место нахождения. Поэтому, когда я получаю представление, все булавки оживят падение до их местоположения, и я действительно не знаю, как это сделать. Если кто-нибудь может привести меня к правильному коду, мне нужно добавить, что это будет здорово!Как сделать карту пальцев оживить падение? Swift 2.2 IOS 9

Вот текущий код у меня есть:

class FirstViewController: UIViewController,MKMapViewDelegate, CLLocationManagerDelegate{ 



@IBOutlet weak var mapView: MKMapView! 





    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.requestWhenInUseAuthorization() 
     self.locationManager.startUpdatingLocation() 
     self.mapView.showsUserLocation = true 


    let LitzmanLocation = CLLocationCoordinate2DMake(32.100668,34.775192) 
     // Drop a pin 
     let Litzman = MKPointAnnotation() 
     Litzman.coordinate = LitzmanLocation 
     Litzman.title = "Litzman Bar" 
     Litzman.subtitle = "Nemal Tel Aviv St'" 
     mapView.addAnnotation(Litzman)} 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    //Dispose of resources that can be re created. 

     } 

    //Mark: 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 

    { 
     let location = locations.last 

     let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 

     let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)) 

     self.mapView.setRegion(region, animated: true) 

     self.locationManager.stopUpdatingLocation() 
    } 

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
    { 
     print("Errors: " + error.localizedDescription) 
    }  
+0

Вы должны быть более конкретными в том, что вы просите, и убедитесь, что ваш код правильно отформатированный - в противном случае вам будет сложно помочь – AlBlue

+0

@AIBlue Где мой друг? –

ответ

5

Прежде всего, я не поддерживать какие-либо стандарты, и я просто один из решения вашей проблемы, и я учусь быстра и MapKit по решение других проблем.

Здесь я дал некоторые примеры кода, и я добавил MAPview и UITapGestureRecognizer через библиотеку объектов.

Для добавления аннотаций, как падение с верхней

pinView!.animatesDrop = true 

в составе делегации в viewForAnnotation method.And addAnnotation метод будет вызывать добавить аннотацию, когда вы кран на карте.

Для анимировать все аннотацию

Я реализовал regionDidChangeAnimated метод делегата и просто удалить и добавить снова все аннотации.

import UIKit 
import MapKit 
import CoreLocation 

class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

@IBOutlet weak var mapView: MKMapView! 

let locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("viewDidLoad") 
    self.mapView.delegate = self 
    self.locationManager.delegate = self 
    self.locationManager.requestWhenInUseAuthorization() 
    self.locationManager.startUpdatingLocation() 
    self.mapView.showsUserLocation = true 

    let locationData = [ 
     //Walker Art Gallery 
     ["name": "Walker Art Gallery", 
      "latitude": 12, 
      "longitude": 79], 
     //Liver Buildings 
     ["name": "Liver Buildings", 
      "latitude": 13, 
      "longitude": 77], 
     //St George's Hall 
     ["name": "St George's Hall", 
      "latitude": 14, 
      "longitude": 77] 
    ] 
    var annotations = [MKPointAnnotation]() 
    for each in locationData { 
     let latitude = CLLocationDegrees(each["latitude"] as! Double) 
     let longitude = CLLocationDegrees(each["longitude"] as! Double) 
     let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
     let name = each["name"] as! String 
     let annotation = MKPointAnnotation() 
     annotation.coordinate = coordinate 
     annotation.title = "\(name)" 
     annotations.append(annotation) 
    } 
    mapView.addAnnotations(annotations) 
} 

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    print("viewForAnnotation \(annotation.title)") 
    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 
    } 
    return pinView 
} 

@IBAction func addAnnotation(sender: UITapGestureRecognizer) { 
    if sender.state == .Ended { 
     let location = sender.locationInView(mapView) 
     let coordinate = mapView.convertPoint(location,toCoordinateFromView: mapView) 

     let annotation = MKPointAnnotation() 
     annotation.coordinate = coordinate 
     mapView.addAnnotation(annotation) 
    } 
} 

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 
    print("regionDidChangeAnimated") 
    let annotations = self.mapView.annotations 
    self.mapView.removeAnnotations(annotations) 
    self.mapView.addAnnotations(annotations) 
} 
} 

EDIT

В вашем случае в методе viewDidLoad добавить

self.mapView.delegate = self 

Для аннотирования MKAnnotation вы должны реализовать метод ниже Делегат

//Annotation view 
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    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 
    } 
    return pinView 
} 

После для аннотации всей аннотации n вы должны реализовать ниже метод делегата.

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 
    let annotations = self.mapView.annotations 
    self.mapView.removeAnnotations(annotations) 
    self.mapView.addAnnotations(annotations) 
} 

И я предполагаю, что вы знаете, как добавить аннотацию на карте кране ...

EDIT2

Вот что вам нужен мой друг.

В представленииDidLoad добавить один уведомление наблюдателя следующим образом.

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(didBecomeActive), name: UIApplicationDidBecomeActiveNotification, object: nil) 

И, наконец, изменения, которые regionDidChangeAnimated к didBecomeActive ниже

func didBecomeActive() { 
    let annotations = self.mapView.annotations 
    self.mapView.removeAnnotations(annotations) 
    self.mapView.addAnnotations(annotations) 
} 
+0

Во-первых, Спасибо, что нашли время, чтобы помочь :) Во-вторых, я хотел бы знать, если я ** Dont ** хочу полностью изменить свой код и просто добавить функциональность, которую все мои аннотации будут оживлять, просто скопируйте этот код From :} повторное использование ID = Pin. Чтобы: вернуть PinView. В моем коде? –

+0

это не работало для меня ...... Можете ли вы попробовать и реализовать только pinView.! AnmiatesDrop = true для моего кода, не меняя его entirleyl, пожалуйста? –

+0

См. Часть редактирования моего ответа, которую я тестировал, используя только ваш код ... –

 Смежные вопросы

  • Нет связанных вопросов^_^