【问题标题】:Swift 3 Draggable UIButtonSwift 3 可拖动 UIButton
【发布时间】:2017-06-12 00:28:21
【问题描述】:

抱歉,我仍在学习 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 button uigesturerecognizer pan


    【解决方案1】:

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

    let pan = UIPanGestureRecognizer(target: self, action: #selector(panButton(_:))
    

    此外,您不能通过选择器传递按钮的值,因此您需要将 func 更改为:

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

    如果您想知道如果不能将按钮作为参数传递,您应该如何找到按钮,那么您可以考虑使用标签。

    【讨论】:

    • 我在使用以下代码的示例中遇到错误:错误使用未解析的标识符“panButton”让 pan = UIPanGestureRecognizer(target: self, action: #selector(panButton(_:)) ) func panButton (发送者: UIPanGestureRecognizer) {
    • 你不应该这样。您的代码看起来正确。也许如果你用更新的代码编辑你的帖子,我可以看看。
    • 感谢您的浏览。我已经用我当前的代码更新了这个问题。
    【解决方案2】:

    正如@benjamin 在 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
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      相关资源
      最近更新 更多