2017-01-26 66 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