Slider

13»

Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    1. Pourquoi tu as fait ça ?



    class EpreuveListViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource
    {
    @IBOutlet weak var epreuveListCollectionView: UICollectionView!

    ...

    Si tu faisais :



    class EpreuveListViewController: UICollectionViewController
    {
    ...

    Tu aurais la même fonctionnalité et tu n'aurais pas besoin de mettre la UICollectionView dans la UIView d'un UIViewController.


     


    Et, en plus :



    protocol EpreuveViewController
    {
    var title: String? { get set }

    var image: UIImage? { get set }
    }


    class KibonV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }


    class HanbonV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }


    class KyorugiV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }


    class HoshinsoulV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }

    ...

    et :



    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "reuse", for: indexPath)

    if let cell = cell as? RGCollectionViewCell
    {
    cell.imageView.image = UIImage(named: "i\(indexPath.section + 1)")
    }

    return cell
    }

    et :



    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
    guard let indexPath = collectionView?.indexPathsForSelectedItems?.first,
    var epreuveViewController = segue.destination as? EpreuveViewController else
    {
    return
    }

    epreuveViewController.title = epreuvesName[indexPath.section]

    epreuveViewController.image = epreuvesImageArr[indexPath.section]
    }

    ... simplifierait ton code.




  • 1. Pourquoi tu as fait ça ?



    class EpreuveListViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource
    {
    @IBOutlet weak var epreuveListCollectionView: UICollectionView!

    ...

    Si tu faisais :



    class EpreuveListViewController: UICollectionViewController
    {
    ...

    Tu aurais la même fonctionnalité et tu n'aurais pas besoin de mettre la UICollectionView dans la UIView d'un UIViewController.


     


    Et, en plus :



    protocol EpreuveViewController
    {
    var title: String? { get set }

    var image: UIImage? { get set }
    }


    class KibonV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }


    class HanbonV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }


    class KyorugiV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }


    class HoshinsoulV0TableViewController : UITableViewController, EpreuveViewController
    {
    var image: UIImage?
    }

    ...

    et :



    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "reuse", for: indexPath)

    if let cell = cell as? RGCollectionViewCell
    {
    cell.imageView.image = UIImage(named: "i\(indexPath.section + 1)")
    }

    return cell
    }

    et :



    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
    guard let indexPath = collectionView?.indexPathsForSelectedItems?.first,
    var epreuveViewController = segue.destination as? EpreuveViewController else
    {
    return
    }

    epreuveViewController.title = epreuvesName[indexPath.section]

    epreuveViewController.image = epreuvesImageArr[indexPath.section]
    }

    ... simplifierait ton code.




     


     


    Mes connaissances en développement sont très sommaires comme tu as pu le constater à  plusieurs reprises.

    J'apprends et j'applique les méthodes à  travers les différents tutoriels jusqu'au jour ou des personnes, dont c'est réellement le métier, comme vous tous, me conseille et me guide sur de nouvelles pratiques.

    Je vois clairement que mon code serait réellement plus allégé, et plus, lisible avec ton exemple. Mais je m'interroge encore sur l'articulation du protocole. Le reste étant parfaitement assimilé.

    Merci beaucoup de ton temps et de ta patience.

    Merci à  vous tous

  • Joanna CarterJoanna Carter Membre, Modérateur


    Mais je m'interroge encore sur l'articulation du protocole. Le reste étant parfaitement assimilé.




     


    Un protocole décrit un contrat, exigence ou obligation que l'on veuille imposer sur quelques classes, structs ou enums.


     


    Dans ce cas là , j'ai déterminé de ton code que tu assignes title et image à  tous les ViewControllers ; du coup, j'ai "extrait" ces deux propriétés et les ai mis dans le protocole.


     


    Après ça, j'ai marqué que UIViewController implémente déjà  title ; donc, j'ai ajouté une var image: UIImage? à  chaque de mes ViewControllers de test et, voilà  ! Je peut maintenant traiter tous les ViewControllers comme le protocole, en évitant de les tester pour sa propre classe.


     


    Mais, je soupçonne, comme dit Larme, que tous tes ViewControllers contient le même code, copié/collé. Si oui, tu pourrais supprimer tous sauf un, et ignorer le protocole.



  • Elle est où la transition qui te pose soucis dans le code que tu as donné ?


     


    Et j'ai peur que tous tes segues ne puissent en réalité être qu'un seul et les ViewControllers associés également.




     


    Effectivement, ce n'est pas la transition qui posait problème.


    J'ai fini par trouver la raison.

    En fait, mes cells ainsi que mon background sont à  l'état zéro sur le même plan (je ne sais pas trop comment reformuler cela)

    Lorsque je slide mes cells ces derniers passe sur le plan -1 dans la première moitié supérieur.

    Ainsi, le background étant toujours à  l'état zéro, les deux éléments se coupent au centre.

    Désoler ça fait charabia mais en résumer, sans le background tout fonction nickel

    Je me suis rendu compte en testant sur un vrai device. Pas évident sur le simulateur

  • Merci à  tous pour vos éléments de réponses


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