UILongPressGestureRecognizer中的while循环不起作用

时间:2015-02-15 23:31:26

标签: ios swift while-loop uigesturerecognizer

我试图调整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)

    }
}

我不明白为什么这不起作用,以及如何以其他任何方式进行。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

它可能是这样的:

  • 从触摸屏发送事件并发出信号以唤醒您的应用。
  • 手势识别器查看排队的事件并决定进入“开始”状态。
  • 手势识别器代码调用您的操作方法(buttonLongPressed) 您的代码会进入一段时间并反复读取 gestureRecognizer.state

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

您可以像这样更改您的功能:

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