Aller au contenu


Photo

Slider


  • Please log in to reply
65 réponses à ce sujet

#61 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 29 juin 2017 - 16:56

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.


  • Joanna Carter et rollano aiment ceci
Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#62 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 887 messages
  • LocationPlestin-les-Grèves (22)

Posté 29 juin 2017 - 17:45

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.


  • rollano aime ceci

#63 rollano

rollano

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 221 messages

Posté 30 juin 2017 - 10:01

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



#64 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 887 messages
  • LocationPlestin-les-Grèves (22)

Posté 01 juillet 2017 - 11:17

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.


  • rollano aime ceci

#65 rollano

rollano

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 221 messages

Posté 03 juillet 2017 - 09:50

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



#66 rollano

rollano

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 221 messages

Posté 03 juillet 2017 - 09:51

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






0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)