2017-01-26 65 views
1

道歉,因为我仍然在学习Swift的基础知识。Swift 3 Draggable UIButton

我试图移动一个按钮,当我拖动它听起来很简单。我无法弄清楚如何将发件人信息传递给拖动功能,以便将其与正在拖动的按钮相关联。

我创建多个一个字按钮这是纯文本,并附上平移手势识别他们每个人:

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' 

回答

1

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

首先,你的行动NE EDS是在斯威夫特3.选择因此,这将是这个样子:

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

此外,您无法通过选择通过一个按钮的值,所以你需要改变你的FUNC是:

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

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

+0

我使用的下面的代码的例子得到一个错误: 错误 使用未解决的识别符 'panButton' 设锅= UIPanGestureRecognizer(目标的:自,动作:#selector(panButton(_ :))) FUNC PANB utton(发件人:UIPanGestureRecognizer){ – SwiftLanding

+1

你不应该。你的代码看起来不错。也许如果你用更新的代码编辑你的文章,我可以看看。 –

+0

谢谢你的采访。我用当前的代码更新了这个问题。 – SwiftLanding