-1

J'ai ajouté un UISwipeGestureRecogniser dans ma tableviewcell. Maintenant, je voudrais ajouter un effet de diapositive en temps réel à ma tableviewcell. Si je balaye actuellement la cellule, rien ne se passe. La cellule devrait juste être swipeable.cadre de mise à jour rapide de uitableviewcell avec uiswipegesturerecognizer

Mon code:

var originalCenter = CGPoint() 

var rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:")) 
rightSwipe.direction = .Right 
self.addGestureRecognizer(rightSwipe) 

func handleSwipes(recogniser:UISwipeGestureRecognizer) { 

    let location : CGPoint = recogniser.locationInView(self) 

    if (recogniser.direction == .Right) { 

     if recogniser.state == .Began { 

      // when the gesture begins, record the current center location 
      originalCenter = center 
     } 

     if recogniser.state == .Changed { 

      let translation = recogniser.locationInView(self) 
      center = CGPointMake(originalCenter.x + translation.x, originalCenter.y) 
     } 

     if recogniser.state == .Ended { 

     } 

     println("Swipe Right") 
    } 
} 
+0

Vous configurez un UIPanGestureRecognizer mais vous continuez à faire référence au balayage. Si vous avez seulement besoin de pouvoir balayer, vous pouvez configurer UISwipeGestureRecognizer et définir sa direction. – Tyrelidrel

+0

J'ai mis à jour mon code avec un 'uiswipegesturerecognizer' mais je ne sais pas pourquoi la cellule ne change pas sa position. – user5473123

Répondre

0

J'ai des balayages de cellules personnalisés mis en œuvre dans mes projets précédents ... vous devez animer les choses à ressembler exactement au balayage qui fonctionne dans le balayage des messages de notification. Je peux vous donner un extrait en Objective-C. vous devriez être capable de le traduire facilement en swift;)

-(void)handleLeftCellSwipe:(UISwipeGestureRecognizer *)recognizer{ 
    CGPoint location = [recognizer locationInView:self.localTableView]; 
    NSIndexPath *swipedIndexPath = [self.localTableView indexPathForRowAtPoint:location]; 
    UITableViewCell *swipedCell = [self.localTableView cellForRowAtIndexPath:swipedIndexPath]; 
    if(swipedCell){ 
      [UIView animateWithDuration:0.3 delay:0.0 usingSpringWithDamping:0.7 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
      [swipedCell.contentView setFrame:CGRectMake(swipedCell.contentView.frame.origin.x - 40, swipedCell.contentView.frame.origin.y, swipedCell.contentView.frame.size.width, swipedCell.contentView.frame.size.height)]; 
      } completion:^(BOOL finished){ 
       // Do whatever you need to do after animation completes 
      }]; 
    } 
} 
+0

J'ai obtenu la première partie ('emplacement var = recogniser.locationInView (tableView) var = swipedIndexPath tableView.indexPathForRowAtPoint (emplacement) var = swipedCell tableView.cellForRowAtIndexPath (swipedIndexPath!) Comme UITableViewCell? '), mais ne savent pas comment Je peux aller plus loin (j'apprends encore Swift). Pourriez-vous s'il vous plaît m'aider à traduire la 2ème partie? – user5473123

0

Vous pouvez facilement faire ce que vous voulez faire par le sous-classement UIPanGestureRecognizer. Mais ne le fais pas. Au lieu d'ajouter un outil de reconnaissance de gestes, transformez votre cellule en UIScrollView. Vous pouvez maintenant définir son origine contentSize et ses limites de façon à pouvoir le faire défiler de gauche à droite uniquement. L'avantage ici est que vous utilisez une classe d'interface intégrée qui est conçue pour être déplacée automatiquement. Vous pouvez utiliser les méthodes déléguées pour suivre ce que fait l'utilisateur si vous en avez besoin.

+0

Pourriez-vous s'il vous plaît jeter un oeil à ma question mise à jour? – user5473123

+0

Pourriez-vous s'il vous plaît envisager de faire ce que j'ai dit? De toute évidence, la cellule ne va nulle part en l'état; vous ne faites rien pour le faire bouger. Mais le contenu défilant d'une vue de défilement à l'intérieur de la cellule peut être quelque part. – matt