UILongPressGestureRecognizer 中的 While 循环不起作用

While-loop in UILongPressGestureRecognizer not working

我试图在长按视图时调整 textField 的位置,但出于某种原因,while 循环从未停止 运行。我的代码如下所示:

func buttonLongPressed(gestureRecognizer:UIGestureRecognizer){
    if textEdit.editing == true{
    self.textEdit.endEditing(true)
    }
    while gestureRecognizer.state == UIGestureRecognizerState.Began{
    println("BEGAN")
    self.textEdit.frame = CGRectMake(0, gestureRecognizer.locationInView(self.view).y, self.view.frame.width, 44)

    }
}

我不明白为什么这不起作用,以及如何以任何其他方式做到这一点。

如有任何建议,我们将不胜感激。

手势识别器在其状态发生变化时调用您的操作方法——从 while 循环中轮询状态是无效的,它永远不会改变。

大概是这样的:

  • 事件是从触摸屏发送的,带有唤醒您的应用程序的信号。
  • 手势识别器查看排队的事件并决定进入 "Began" 状态。
  • 手势识别器代码调用您的操作方法 (buttonLongPressed) 你的代码输入 while look 并重复读取 gestureRecognizer.state.

您可以看到,如果您的操作方法从不 returns,手势识别器将永远不会再次唤醒并查看新的输入。

您可以像这样更改函数:

func longPressAction( g:UILongPressGestureRecognizer )
{
    switch g.state
    {
        case: .Changed
        {
            // handle one drag update... but don't loop
        }
    }
}