2016-11-07 2 views
2

Я Bulding приложение в Swift 3.LongPress в MapKit

Everything швы работать нормально, однако, когда я longPress на карте она действует, как если бы он был longpressed дважды. Я не знаю, почему ... Я сделал печать внутри длинного нажатия, чтобы посчитать длинные нажатия, и каждый раз, когда я отжимаю (один раз), он обнаруживает два длинных нажатия ... почему это происходит? Что с этим не так?

import UIKit 
import MapKit 

class ViewController: UIViewController, MKMapViewDelegate { 

@IBOutlet var map: MKMapView! 

var numberOfLongPress : Int = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 


    let latitude: CLLocationDegrees = 38.925560 

    let longitude: CLLocationDegrees = -9.229723 

    let lanDelta: CLLocationDegrees = 0.05 

    let lonDelta: CLLocationDegrees = 0.05 

    let span = MKCoordinateSpan(latitudeDelta: lanDelta, longitudeDelta: lonDelta) 

    let coordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 

    let region = MKCoordinateRegion(center: coordinates, span: span) 

    map.setRegion(region, animated: true) 

    let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longpress(gestureRecognizer:))) 

    lpgr.minimumPressDuration = 0.5 

    map.addGestureRecognizer(lpgr) 

} 

func longpress(gestureRecognizer: UIGestureRecognizer) { 

    let touchPoint = gestureRecognizer.location(in: self.map) 

    let coordinate = map.convert(touchPoint, toCoordinateFrom: self.map) 

    let annotation = MKPointAnnotation() 

    annotation.coordinate = coordinate 

    annotation.title = "My Place" 



    map.addAnnotation(annotation) 

    print("longpress activated") 

    numberOfLongPress = numberOfLongPress + 1 

    print(numberOfLongPress) //detect number of long presses 

} 

}

ответ

3

Selector вызывается на каждом изменении состояния, так что лучше проверить состояние и делать то, что вам нужно сделать на .began или .ended.

func longpress(gestureRecognizer: UIGestureRecognizer) { 
    guard gestureRecognizer.state == .began else { return } 

    // add annotation 
} 
+0

Всё. Благодаря :) –

2

Пусть печать состояние gestureRecognizer, вы увидите .began и .ended. Поэтому перед добавлением аннотации проверьте состояние gestureRecognizer.

func longpress(gestureRecognizer: UILongPressGestureRecognizer) { 
    if gestureRecognizer.state == began { 
     // do something here 
    } 
} 
Смежные вопросы