2017-02-21 19 views
-1

Пан жест добавлен в поле зрения моего ViewController. Он должен обнаружить, какая ячейка collectionView i была использована, и переместить ее. Все работает хорошо, но иногда Pan Gesture поймал «начать» и «изменил» события и не поймал никаких конечных событий (нужно ловить «закончившееся» событие). Я попытался поймать все события, но когда я выхожу из пальцев - ничего не происходит. Жест Пан добавлен в Раскадровка и связан с действием.UI Pan Gesture не работает

Вот код моего действия:

//--------------\\ 
    var translitionSensitivity : CGFloat = 1.0 
    let thresholdWhenSensitivityWillGrow : CGFloat = self.view.frame.width/4 
    let sensitivityMultiplier : CGFloat = 15 
    let animDuration = 0.4 
    //--------------\\ 


    DispatchQueue.main.async { 
     let indexPath = self.getCellAtPoint(sender.location(in: self.view)) 
     if indexPath == nil { return } 

     var cell = self.collectionView.cellForItem(at: indexPath!) as! DetailCardCollectionViewCell 
     if self.activeCell != nil { cell = self.activeCell } else {self.activeCell = cell} 

     let translation = sender.translation(in: self.collectionView) 
     var howMuchOffseted : CGFloat = 0.0 

     if sender.state == .began 
     { 
      self.lastTranslationPos = 0 
     } 

     if sender.state == .changed 
     { 
      if cell.mainViewTrailingConstraint.constant >= thresholdWhenSensitivityWillGrow 
      { 
       translitionSensitivity += (cell.mainViewTrailingConstraint.constant - thresholdWhenSensitivityWillGrow)/sensitivityMultiplier 
      } 
      else 
      { 
       translitionSensitivity = 1 
      } 

      howMuchOffseted = (self.lastTranslationPos - translation.x)/translitionSensitivity 
      self.lastTranslationPos = translation.x 

      cell.mainViewTrailingConstraint.constant += howMuchOffseted 
     } 

     if sender.state == .ended || sender.state == .cancelled || sender.state == .failed || sender.state == .possible || sender.state == .recognized 
     { 
      print("ended") 
      if cell.mainViewTrailingConstraint.constant > thresholdWhenSensitivityWillGrow/2 
      { 
       cell.mainViewTrailingConstraint.constant = thresholdWhenSensitivityWillGrow 
       UIView.animate(withDuration: animDuration, delay: 0.0, options: [.curveEaseOut], animations: { 
        cell.layoutIfNeeded() 
       }, completion: nil) 
      } 
      else 
      { 
       cell.mainViewTrailingConstraint.constant = 0 
       UIView.animate(withDuration: animDuration, delay: 0.0, options: [.curveEaseOut], animations: { 
        cell.layoutIfNeeded() 
       }, completion: nil) 
      } 

      self.activeCell = nil 
     } 
    } 
+1

«Жест жеста, добавленный в Раскадровка и связанный с действием» Добавлен в _what_? – matt

+0

@matt, IBAction –

+0

Вы не ответили на мой вопрос. Какой признак распознавания поворота добавлен _to_ «на раскадровке»? Предоставьте достаточную информацию для кого-то, кто ищет проблему, с которой вы сталкиваетесь. – matt

ответ

0

Вы делаете вещи слишком трудно для себя. Используя код, поместите распознаватель жесты панорамы на вид , который вы хотите, чтобы перетащить (в каждой ячейке). Или, что еще лучше, оберните это представление в горизонтальном представлении прокрутки, так что он будет автоматически перетаскиваться (поскольку прокручиваемое представление прокручивается) - так работают большинство реализаций с использованием салфеток.