SWIFT 2:MapView上第一次滑动手势的问题

时间:2015-08-28 14:29:22

标签: ios swift2 uiswipegesturerecognizer

我在MapView上滑动手势有问题,为了更准确我在MapView上遇到第一个滑动手势的问题,因为它没有功能&同时移动屏幕。

  • 代码识别我的位置,在我身上添加注释,并运行5秒计时器,允许应用程序每5秒添加一次新注释。 MapView通常遵循我的路径。到目前为止都很好。最后检查我的模拟器的图片。

然后我突然意识到允许用户从该区域开始并探索地图的其余部分是个好主意。用户只能在任何方向上滑动。当用户在任何其他位置时,他可以按下" getBack"按钮将地图置于当前位置的中心位置。一切都很好。

问题是,当检测到手势滑动时,第一次滑动不会移动屏幕。它只是第二个迅速发挥作用。 我认为这可能是第一次滑动只会阻止地图跟随我的路径,然后第二次滑动是移动屏幕的地图。 有没有办法让第一次滑动停止跟踪我的路径并同时移动地图?

  • 我希望自己明确表示:(

ViewController的代码:

import UIKit

import MapKit

import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

@IBOutlet var map: MKMapView!

var locationManager = CLLocationManager()

let latDelta:CLLocationDegrees = 0.05

let longDelta:CLLocationDegrees = 0.05

var reStartCountClock = true

var getBackInPlace = true

var timer = NSTimer()

@IBAction func getBack(sender: AnyObject) {

getBackInPlace = true

}

override func viewDidLoad() {

super.viewDidLoad()

locationManager.delegate = self

locationManager.desiredAccuracy = kCLLocationAccuracyBest

locationManager.requestAlwaysAuthorization()

locationManager.startUpdatingLocation()

let uilpgr = UILongPressGestureRecognizer(target: self, action: "actionWhenPressed:")

uilpgr.minimumPressDuration = 1

map.addGestureRecognizer(uilpgr)

let uilpgrD = UISwipeGestureRecognizer(target: self, action:Selector("handleSwipe:"))

uilpgrD.direction = .Down

let uilpgrU = UISwipeGestureRecognizer(target: self, action:Selector("handleSwipe:"))

uilpgrU.direction = .Up

let uilpgrR = UISwipeGestureRecognizer(target: self, action:Selector("handleSwipe:"))

uilpgrR.direction = .Right

let uilpgrL = UISwipeGestureRecognizer(target: self, action:Selector("handleSwipe:"))

uilpgrL.direction = .Left

map.addGestureRecognizer(uilpgrD)

map.addGestureRecognizer(uilpgrR)

map.addGestureRecognizer(uilpgrL)

map.addGestureRecognizer(uilpgrU)

}

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

let locationOnline:CLLocation = locations[0]

let spanOnline:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)

let centerOnline:CLLocationCoordinate2D = CLLocationCoordinate2DMake(locationOnline.coordinate.latitude, locationOnline.coordinate.longitude)

let regionOnline:MKCoordinateRegion = MKCoordinateRegionMake(centerOnline, spanOnline)

if getBackInPlace == true {

self.map.setRegion(regionOnline, animated: true)

}

if reStartCountClock == true {

timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "Anota", userInfo: nil, repeats: true)

reStartCountClock = false

let annotationOnline = MKPointAnnotation()

annotationOnline.title = "Updated Location"

annotationOnline.subtitle = "Pin Pam Pum"

annotationOnline.coordinate = centerOnline

self.map.addAnnotation(annotationOnline)

}

}

func handleSwipe (gestureRecognizer: UIGestureRecognizer)

{

getBackInPlace = false

print("Entra en el gesto")

}

func Anota (){

reStartCountClock = true

timer.invalidate()

}

func actionWhenPressed (gestureRecognizer: UIGestureRecognizer) {

if gestureRecognizer.state == UIGestureRecognizerState.Began

{

getBackInPlace = false

print("Gesture Recognized")

let touch = gestureRecognizer.locationInView(self.map)

let touchCoordinate:CLLocationCoordinate2D = map.convertPoint(touch, toCoordinateFromView: self.map)

let touchAnnotation = MKPointAnnotation()

touchAnnotation.coordinate = touchCoordinate

touchAnnotation.title = "You tapped here"

touchAnnotation.subtitle = "It is a recommended place"

self.map.addAnnotation(touchAnnotation)

}

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

模拟器:

Swift 2 - Swipe Gesture On Maps

0 个答案:

没有答案