2015-11-10 35 views
1

我有了這個函數來處理視圖的拖動:+UIPanGestureRecogniser工作不正常

func handlePan(recognizer:UIPanGestureRecognizer) { 
    let translation = recognizer.translationInView(self.view) 



    let newCenter = CGPointMake(self.view.bounds.size.width/2, 
     recognizer.view!.center.y + translation.y) 

    print("the translation x:\(translation.x) & y:\(newCenter.y)") 

    if (newCenter.y >= 397 && newCenter.y <= 632) { 
     recognizer.view!.center = newCenter 


     recognizer.setTranslation(CGPointZero, inView: self.view) 
    } 


} 

的立場是正確的。 但是,當我拖動時需要移動的視圖經常會阻止,所以我需要停下來並開始再次拖動它。

我該如何解決這個問題?

編輯:我的代碼看起來現在這個樣子,但我仍然有問題:

func handlePan(recognizer:UIPanGestureRecognizer) { 
    let translation = recognizer.translationInView(self.view) 


     switch recognizer.state { 
      case .Ended:fallthrough 
      case .Changed: 

       let newCenter = CGPointMake(self.view.bounds.size.width/2, 
        recognizer.view!.center.y + translation.y) 

       print("the translation x:\(translation.x) & y:\(newCenter.y)") 

       if (newCenter.y >= 397 && newCenter.y <= 632) { 
        recognizer.view!.center = newCenter 
        recognizer.setTranslation(CGPointZero, inView: self.view)} 

      default : break } 


} 
+0

確定姿勢的狀態作爲結束,開始。我會幫你的。 –

+0

'recognizer.state',然後嘗試添加代碼@'.Changed' – Korpel

+0

您可以更具體嗎?抱歉。 @Korpel – dpstart

回答

0

因爲我不知道你的代碼的其他部分,這是假設你有什麼可能,應該在節看起來像:

class ViewController: UIViewController { 

// Gesture function 
func panAround(recognizer: UIPanGestureRecognizer) { 
    switch recognizer.state { 
    ... 
    case .Changed: 
     let translation = recognizer.translationInView(yourView) 
     let newCenter = CGPointMake(self.view.bounds.size.width/2, 
       recognizer.view!.center.y + translation.y) 

     print("the translation x:\(translation.x) & y:\(newCenter.y)") 

     if (newCenter.y >= 397 && newCenter.y <= 632) { 
      recognizer.view!.center = newCenter 

      // Updating the UI whenever there is a "small change" 
      updateUI() 

      recognizer.setTranslation(CGPointZero, inView: self.view) 
     } 
    ... 
    } 
} 

private func updateUI() { 
    yourView.setNeedsDisplay() 
} 

注:上面的代碼不會被複制和粘貼直接工作,我只是指出在那裏你可以進行調整。

+0

我已經做過了,但我仍然有同樣的問題... – dpstart

+0

您能更具體地瞭解您希望移動的視圖發生了什麼嗎?它根本就沒有動起來,還是隻是移動了幾個像素,並停下來,所以你必須繼續「滑動」來移動它? –

+0

是的第二個。它移動到正確的地方,但我(有時)我需要刷幾次才能到達這一點。 – dpstart