Swift 3可拖动按钮

Swift 3可拖动按钮,swift,button,uigesturerecognizer,pan,Swift,Button,Uigesturerecognizer,Pan,抱歉,我还在学习Swift的基础知识 我试图在拖动按钮时移动它,这听起来很简单。我不知道如何将发件人信息传递给拖动功能,以便将其与正在拖动的按钮关联 我创建了多个仅为文本的单字按钮,并将平移手势识别器连接到每个按钮: let pan = UIPanGestureRecognizer(target: self, action: #selector(panButton(_:))) let word = UIButton(type: .system) word.addGestureRecognizer

抱歉,我还在学习Swift的基础知识

我试图在拖动按钮时移动它,这听起来很简单。我不知道如何将发件人信息传递给拖动功能,以便将其与正在拖动的按钮关联

我创建了多个仅为文本的单字按钮,并将平移手势识别器连接到每个按钮:

let pan = UIPanGestureRecognizer(target: self, action: #selector(panButton(_:)))
let word = UIButton(type: .system)
word.addGestureRecognizer(pan)
我创建了此函数,以在按钮移动时触发:

func panButton(sender: UIPanGestureRecognizer){
    if sender.state == .began {
        //wordButtonCenter = button.center // store old button center
    } else if sender.state == .ended || sender.state == .failed || sender.state == .cancelled {
        //button.center = wordButtonCenter // restore button center
    } else {
        let location = sender.location(in: view) // get pan location
        //button.center = location // set button to where finger is
    }
}
我得到以下错误:

Use of unresolved identifier 'panButton'

首先,您的操作需要是Swift 3中的选择器。所以看起来是这样的:

let pan = UIPanGestureRecognizer(target: self, action: #selector(panButton(_:))
此外,不能通过选择器传递按钮的值,因此需要将func更改为:

func panButton(sender: UIPanGestureRecognizer){
    ...
}

如果你想知道如果你不能把它作为一个参数传递,那么你可以考虑使用标签。

AS @本杰明在SWIFT 3中指出,你需要成为一个选择器。为了提取按钮标记,我已将代码更新为以下内容:

let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.panGestureHandler(panGesture:)))
    panGesture.minimumNumberOfTouches = 1
    let word = UIButton(type: .system)
使用以下选择器:

@objc func panGestureHandler(panGesture recognizer: UIPanGestureRecognizer) {

    let buttonTag = (recognizer.view?.tag)!
    if let button = view.viewWithTag(buttonTag) as? UIButton {

        if recognizer.state == .began {
            wordButtonCenter = button.center // store old button center
        } else if recognizer.state == .ended || recognizer.state == .failed || recognizer.state == .cancelled {
            button.center = wordButtonCenter // restore button center
        } else {
            let location = recognizer.location(in: view) // get pan location
            button.center = location // set button to where finger is
        }
    }
}

使用您的示例,我得到一个使用以下代码的错误:错误使用未解析标识符“panButton”让pan=UIPangestureRecognitizer(目标:self,操作:#选择器(panButton(:))func panButton(发送方:UIPangestureRecognitizer){你不应该这样。你的代码看起来不错。也许如果你用更新的代码编辑你的帖子,我可以看一看。谢谢你看一看。我已经用我当前的代码更新了这个问题。