-1

Pan-Geste bei Ansicht meines ViewController hinzugefügt. Es muss erkennen, welche Zelle von collectionView i angezapft wurde, und es verschieben. Alles funktioniert gut, aber manchmal fängt die "Pan-Geste" Ereignisse ein, die "beginnen" und "geändert" haben, und hat keine End-Events (das "Ende" -Ereignis) erwischt. Ich habe versucht, alle Ereignisse zu erfassen, aber wenn ich meinen Finger raus bekomme - nichts geht weiter. Pan-Geste im Storyboard hinzugefügt und mit Action verbunden.UI Pan-Geste funktioniert nicht

Hier ist der Code meiner Aktion:

//--------------\\ 
    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

"Pan-Geste hinzugefügt am Storyboard und mit der Aktion verbunden" Hinzugefügt _what_? – matt

+0

@matt, IBAction –

+0

Sie haben meine Frage nicht beantwortet. Wie wurde der Pan-Gesten-Erkenner _to_ "im Storyboard" hinzugefügt? Stellen Sie genügend Informationen zur Verfügung, damit jemand Ihr Problem reproduzieren kann. – matt

Antwort

0

Sie sind die Dinge viel zu schwer für sich selbst zu machen. Verwenden Sie den Code und fügen Sie den Pan-Gestenerkenner in die Ansicht ein, die Sie in der Lage sein möchten, (in jeder Zelle) zu ziehen. Oder, noch besser, diese Ansicht in eine horizontale Bildlaufansicht einbinden, so dass sie automatisch gezogen werden kann (weil eine Bildlaufansicht scrollbar ist) - so funktionieren die meisten selbst gebrauten Wipe-to-Delete-Implementierungen.