【问题标题】:iOS swift double tap handle button and mapiOS swift双击手柄按钮和地图
【发布时间】:2018-04-20 10:26:34
【问题描述】:

我有 mapbox 地图和几个按钮。问题是当用户双击任何按钮地图放大时。如何禁用它?即使用户双击缩小,地图也会放大,然后缩小。我尝试过,但在 iOS 中我不知道如何,对于 android 我知道解决方案。当双击按钮地图放大并且按钮委托双击时,下面的代码不起作用...

let singleTap4 = UITapGestureRecognizer(target: self, action: #selector(MainViewController.tapPatrolaBtn))

    singleTap4.numberOfTapsRequired = 1
    singleTap4.numberOfTouchesRequired = 1

    patrolaButton.isUserInteractionEnabled = true
    patrolaButton.addGestureRecognizer(singleTap4)

    patrolaButton.addTarget(self, action: #selector(multipleTap(_:event:)), for: UIControlEvents.touchDownRepeat)


@objc func multipleTap(_ sender: UIButton, event: UIEvent) {
    let touch: UITouch = event.allTouches!.first!
    if (touch.tapCount == 2) {
    }
}

【问题讨论】:

  • 为什么要禁用它?从用户体验的角度来看,这是一种糟糕的方法。
  • 如果您理解,点击按钮我需要在地图上执行一些操作,但双击按钮我不需要放大地图代表!即使我有放大和缩小按钮,如果用户快速点击缩小它总是放大地图,因为它是代表地图放大,然后该按钮点击并缩小

标签: swift


【解决方案1】:

这里你也需要处理双击手势。

如果您使用双击手势识别器,则双击不会被委托给 mapbox 地图,并且不会调用 mapbox 缩放事件

同样使用下面的代码:-

button.addTarget(self, action: #selector(multipleTap(_:event:)), for: UIControlEvents.touchDownRepeat)

//Don't do in action
func multipleTap(_ sender: UIButton, event: UIEvent) {
    let touch: UITouch = event.allTouches!.first!
    if (touch.tapCount == 2) {
    }
}

【讨论】:

  • 我已经尝试过了,但它对我不起作用,我必须将@objc 也添加到multipleTap,两者都是委托按钮和双击地图
  • 我在第一篇文章中添加了它
  • 当你双击按钮时,是否调用了 mulitpleTap 按钮?如果是,请输入返回词以停止执行流程.. 试试这个
  • 是的,multipleTap 被调用,我首先打印到控制台来检查这个,然后我放回车,双击时仍然是委托和地图和按钮
【解决方案2】:

我找到了解决方案,在单击按钮时我运行此代码,因此它会暂时禁用地图手势:

mapView.isZoomEnabled = false

DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
 self.mapView.isZoomEnabled = true }

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多