从故事板设置IBAction时获取“触摸拖动内部”距离

时间:2014-12-14 13:21:24

标签: ios xcode events swift uistoryboard

我知道如何设置UIPanGesture事件和识别器,并以编程方式创建我需要的数据。

但是我正在尝试学习如何使用故事板并使用IBOutlets。

我已经拖了一个IBAction来“触摸拖动内部”。

@IBAction func dragButtonDragEvent(sender: AnyObject)
    {
        println(sender)
    }

问题是我得到的发件人对象只是按钮本身。

使用IBAction时,有没有办法获取拖动距离或拖动事件数据?

我试过

@IBAction func dragButtonDragEvent(sender: AnyObject)
    {
        var drag:UIPanGestureRecognizer = sender as UIPanGestureRecognizer
        println(drag.state)
    }

但是我收到了错误的内存访问错误,并且没有执行println,因为发件人是按钮而不是事件。

从故事板连接时,您能否建议如何使用Touch Drag Inside事件?

2 个答案:

答案 0 :(得分:2)

使用如下事件参数创建@IBAction函数:

@IBAction func touchDragInsideAction(sender: AnyObject, event: UIEvent) {
    // if the sender is a button
    if let button = sender as? UIButton {
        // get the touch inside the button
        let touch = event.touchesForView(button)?.anyObject() as UITouch
        // println the touch location
        println(touch.locationInView(button))
    }
}

当用户将手指拖过按钮时,这将打印用户在按钮上的触摸位置。然后,您可以使用第一个点和最后一个点来获得距离。

请注意,如果您要修改现有功能的方法签名,则必须在故事板中重新连接它。

答案 1 :(得分:0)

enter image description here

将IBAction的参数更改为“发送方和事件”。