Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用双击放大/缩小地图视图+;ios刷卡识别器(如谷歌地图)_Ios_Swift_Xcode - Fatal编程技术网

如何使用双击放大/缩小地图视图+;ios刷卡识别器(如谷歌地图)

如何使用双击放大/缩小地图视图+;ios刷卡识别器(如谷歌地图),ios,swift,xcode,Ios,Swift,Xcode,如何使用双击+滑动识别器(如谷歌地图)放大/缩小地图视图 要添加到地图视图的识别器是什么,我更喜欢swift lang 谢谢 预览: @IBOutlet var map: MKMapView! override func viewDidLoad() { super.viewDidLoad() map.showsUserLocation = true map.delegate = self

如何使用双击+滑动识别器(如谷歌地图)放大/缩小地图视图

要添加到地图视图的识别器是什么,我更喜欢swift lang

谢谢

预览:

@IBOutlet var map: MKMapView!
    override func viewDidLoad() {
              super.viewDidLoad()
            map.showsUserLocation = true
            map.delegate = self
            let LongPress = UILongPressGestureRecognizer(target: self, action: "LongPress:")
            LongPress.minimumPressDuration = 1
            LongPress.numberOfTapsRequired = 2
            map.addGestureRecognizer(LongPress)

对于双击,您可以使用以下代码:

let tap = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
    tap.numberOfTapsRequired = 2
    view.addGestureRecognizer(tap)


func doubleTapped() {
    // do your code here
}

在链接上,您可以看到更多手势。

提供了放大/缩小功能。 双击-

除了双击之外,您不需要自己实现任何识别器。MKMapView构建在与UIScrollView相同的类之上。通过查看其协议,您将看到可用的方法。但是,MKMapKit会覆盖它们,并且不能将独立委托分配给其内部UIScrollView。但是你可以覆盖

- mapView:regionWillChangeAnimated:
- mapView:regionDidChangeAnimated:

协议和手动比较可见矩形和缩放级别的方法。

我找到了解决方案。显然,这是一个泛感觉事件,但是你不能使用任何手势来实现,因为双击手势在你离开屏幕之前不会触发。因此,另一种方法是覆盖mapView中的touchesMoved函数:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)

    for touch in touches {

        if(touch.tapCount == 2) // tapCount 2 means tap on map twice
        {
            tapPositionY = touch.location(in: self).y // self is the mapView
        }
    }
}
override func touchsbegind(touch:Set,带有事件:UIEvent?){
super.touchesbeated(touches,with:event)
接触{
if(touch.tapCount==2)//tapCount 2表示在地图上点击两次
{
tapPositionY=touch.location(在:self中)。y//self是地图视图
}
}
}
t位置用于存储用户在屏幕上触摸的位置。因此,我们可以知道放大或缩小地图视图

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesMoved(touches, with: event)

    for touch in touches {

        if(touch.tapCount == 2)
        {

            let positionY = touch.location(in: self).y

            // 0.95 and 1.05 is zoom in/ zoom out parameter. you can change it
            let zoom = positionY - tapPositionY > 0 ? 0.95 : 1.05 


            var region = self.region
            var span = self.region.span                
            span.latitudeDelta = span.latitudeDelta * zoom
            span.longitudeDelta = span.longitudeDelta * zoom
            region.span = span

            self.setRegion(region, animated: false)

            tapPositionY = positionY // storage the position
        }
    }
}
override func touchesMoved(touch:Set,带有事件:UIEvent?){
super.touchesMoved(touches,with:event)
接触{
如果(touch.tapCount==2)
{
让positionY=触摸位置(in:self).y
//0.95和1.05是放大/缩小参数。您可以更改它
让缩放=位置Y-t位置Y>0?0.95:1.05
var区域=自我区域
var span=self.region.span
span.latitudeDelta=span.latitudeDelta*缩放
span.longitudeDelta=span.longitudeDelta*缩放
region.span=span
self.setRegion(区域,动画:false)
t位置Y=位置Y//存储位置
}
}
}

setRegion animated必须为false,但效果相同。如果设置为true,则会像延迟一样。

我知道UIPinchGestureRecognizer已经添加到地图中以进行放大/缩小,但我需要添加一个识别器,该识别器只需使用一个手指(双击+滑动)即可执行相同操作。您可以在谷歌地图应用程序中尝试此操作,然后您就会理解我。