【问题标题】:How to get a long press time on UIView如何在 UIView 上获得长按时间
【发布时间】:2015-10-03 16:19:57
【问题描述】:

当调用 touchesEnded 方法时,我想在 UIView 上获得长按时间。

我在 UIEvent 中寻找像“时间”或“持续时间”这样的属性,但我找不到。 我该怎么办?

(我正在创建一个游戏,我想更改图形大小以响应长按时间。例如让 size = 20 * long_press_sec )

环境: Xcode7.0.1 Swift2.0

【问题讨论】:

  • 除了 Duncan 的解决方案之外的另一种方法是使用 touchesBegan 和 touchesEnded。但是有些复杂。我相信最好的方法是识别器。
  • @Mehdi hosseinzadeh,感谢您的评论。这似乎是使用识别器的最佳方式。您的建议对我很有帮助,非常感谢。

标签: ios swift uiview swift2


【解决方案1】:

我认为您无法在标准的长按手势识别器上自动获取该信息。您可以使用 minimumPressDuration 属性设置触发所需的时间,然后触发。

我已经有一段时间没有用手势识别器做任何复杂的事情了,但是在稍微看了一下文档之后,我认为你会得到手势时间:

在调用您的操作方法时检查手势识别器的状态。当您看到 UIGestureRecognizerStateBegan 状态时 记录时间(并记住添加最短手势时间,因为在最短的长按持续时间过去之前,您的方法不会触发)。

当手势完成时,您的操作方法将被再次调用,状态为UIGestureRecognizerStateEnded。此时您应该能够计算手势的总持续时间。

编辑:

从@ManikandanD 的代码开始:

var longPressBeginTime: NSTimeInterval
var gesture: UILongPressGestureRecognizer = 
  UILongPressGestureRecognizer(target: self, action: "longPressed:")
gesture.minimumPressDuration = 0.2
self.Your_View_name.addGestureRecognizer(gesture)

func longPressed(longPress: UIGestureRecognizer) 
{
    if (longPress.state == UIGestureRecognizerState.Ended) 
    {
       let gestureTime = NSDate.timeIntervalSinceReferenceDate() -
         longPressBeginTime + longPress.minimumPressDuration 
       println("Gesture time = \(gestureTime)")
    }
    else if (longPress.state == UIGestureRecognizerState.Began) 
    {
      println("Began")
      longPressBeginTime = NSDate.timeIntervalSinceReferenceDate()
    }
}

【讨论】:

  • 感谢您的建议。哦,我明白了,在这种情况下,使用UIGestureRecognizer 是最好的方法。我试过了,效果很好,非常感谢!
  • 如果您希望图形在用户按下时不断改变大小,那么长按手势识别器可能无法正常工作,您需要使用touchesBegan/touchesEnded
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2019-06-19
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多