[Résolu] Effet rebond dans un UIPageViewController

busterTheobusterTheo Membre
octobre 2015 modifié dans API UIKit #1

Bonjour,


en avançant sur mon projet, je me suis rendu compte que les dots du UIPageControl et les infos (champ texte) associées à  chacun des écrans de mon UIPageViewController, s'affichaient mal.


 


En gros, avant ça marchait, et maintenant que j'ai résolu plein de problèmes, ça ne marche plus - Grrr.


 


Comme je garde toutes mes versions, j'ai donc les deux projets, et j'ai pu comparer les codes.


Strictement aucune différence.


 


J'ai compris qu'en fait, c'était le rebond lors des swipes, qui permettaient d'éviter le bug.


 


Mais je ne comprend pas pourquoi je n'ai plus de rebond, et donc des bugs de pagecontrol et champs.


 


Je met deux vidéos, et si quelqu'un a une idée sur : Comment produire l'effet bounce en fin de swipe dans un PVC ? Je suis preneur


 


Vidéo avec bounce


On voit bien le pageControl et le champ en-dessous qui se mettent à  jour


Vidéo sans bounce


Et là , ça ne marche pas, sauf si on refait un tout petit début de swipe - Donc c'est le rebond qui permet que cela fonctionne bien.


 


Mais j'ai perdu ce rebond, et je ne sais pas comment le remettre, j'ai cherché partout, je n'ai rien trouvé


 


Merci d'avance.


Réponses

  • Bon, j'ai trouvé l'origine du bug, mais je ne sais pas comment le résoudre.


     


    En fait, suite au problème résolu dans ce post, si je supprime le swipeLeftToRightPanRecognizer dans



    func populateControllersArray() {
    for i in 0...4 {
    let controller = storyboard!.instantiateViewControllerWithIdentifier("Etape1SbLevel\(i+1)") as ContentEtapesViewController
    controller.itemIndex = i
    controllers.append(controller)
    }
    swipeLeftToRightPanRecognizer = UIPanGestureRecognizer(target: self , action:"swipePrevEtape:")
    controllers[0].view.addGestureRecognizer(swipeLeftToRightPanRecognizer)
    }

    associé à  la fonction



    // Prev Etape
    func swipePrevEtape(recognizer:UIPanGestureRecognizer) {
    let gestureIsDraggingFromRLeftToRight = (recognizer.velocityInView(view).x > 0)
    if gestureIsDraggingFromRLeftToRight {
    if recognizer.state == .Ended {
    pagesNavigationController.popToRootViewControllerAnimated(true)
    }
    }
    let gestureIsDraggingFromRightToLeft = (recognizer.velocityInView(view).x < 0)
    if gestureIsDraggingFromRightToLeft {
    if recognizer.state == .Ended {
    if !controllers.isEmpty {
    pageViewController.setViewControllers([controllers[1]], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
    }
    }
    }
    }

    je n'ai plus le problème.


     


    Mais j'ai besoin de cette fonction. Comment faire ?


    Dans cette fonction, le pageViewController est créé au départ du PVC.



    func createPageViewController() {
    let pageController = UIPageViewController(transitionStyle: UIPageViewControllerTransitionStyle.Scroll, navigationOrientation: UIPageViewControllerNavigationOrientation.Horizontal, options: nil)
    pageController.dataSource = self
    // pageController.delegate = self

    if !controllers.isEmpty {
    pageController.setViewControllers([controllers[0]], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
    }

    pageViewController = pageController
    // pageViewController.bounce = true

    addChildViewController(pageViewController!)
    self.view.addSubview(pageViewController!.view)
    pageViewController!.didMoveToParentViewController(self)
    }

    Je dois faire une erreur dans ma fonction swipePrevEtape, mais je ne vois pas où.


     


    En résolvant un problème capital, je me retrouve avec un bug à  la c...


     


    Quelqu'un aurait-il une idée ?


     


    Merci d'avance.


  • AliGatorAliGator Membre, Modérateur
    Piste : as-tu autorisé les deux UIGestureRecognizers (le tien et celui interne au PVC) à  être exécutés en concurrence " en retournant YES dans la méthode de delegate dédiée du UIGestureRecognizer ?


    Ton GR doit certainement bloquer celui du PVC (en reconnaissant la Gestures avant lui et l'interceptant) alors que si tu configures ton delegate pour dire qu'il peut reconnaà®tre simultanément la Gestures avec un autre (au lieu d'intercepter et empêcher la propagation de la Gesture aux autres), le PVC pourra de nouveau continuer à  fonctionner comme il le faisait avant que tu n'ajoutes ton GR
  • Heu non, j'ai déjà  croisé tout ça mais je ne suis pas parvenu à  l'implémenter. Une vrai buse.


     


    En attendant, j'ai fait une bidouille, lors de mon swipe PVC (donc right to left) j'ai forcé la mise à  jour de mon texte associé au premier écran, en dur - et c'est pas trop mal - Je mettrais le code plus tard, car là  je suis sur le portable.


     


    Merci encore, mais aurais-tu un exemple ?


Connectez-vous ou Inscrivez-vous pour répondre.