Slider

2

Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    Supprimes - import Foundation


     


    Ajoutes - import UIKit


  • C'est parfait, Joanna, cela règle les erreurs


     


    Maintenant peux-tu me dire comment je l'associe à  mon UICollectionView ?


     


    (Vraiment désoler pour mes questions de "néophite"


     


    et merci pour votre patience :)


  • Tu ne l'associe pas, tu le remplace par ..


     


    UICollectionViewFlowLayout est une UICollectionView personnalisé permettant de définir la taille et l'emplacement de chacun de ces composants.

  • Joanna CarterJoanna Carter Membre, Modérateur
    juin 2017 modifié #35
    En InterfaceBuilder, sélectionnes le UICollectionView dans la colonne à  gauche de la vue principale, cliques sur la flèche pour dérouler et sélectionnes le layout. Puis, dans l'inspecteur, remplaces le nom de la classe UICollectionViewFlowLayout avec le nom de ta classe.
  • Je n'avais pas pensé à  résoudre le problème en transposant le code ligne à  ligne de l'objet-C vers Swift.

  • Joanna CarterJoanna Carter Membre, Modérateur
    juin 2017 modifié #37

    Et voici comment changer la classe du layout :


     


  • Joanna CarterJoanna Carter Membre, Modérateur

    Petites corrections dans le code ; il faut copier les attributes avant de les transformer :



    override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?
    {
    let attributes = super.layoutAttributesForItem(at: indexPath)?.copy() as! UICollectionViewLayoutAttributes

    applyTransform(to: attributes)

    return attributes
    }

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]?
    {
    guard let attributes = super.layoutAttributesForElements(in: rect)?.map({ return $0.copy() as! UICollectionViewLayoutAttributes}),
    let collectionView = collectionView else
    {
    return nil
    }

    let cellIndices = collectionView.indexPathsForVisibleItems

    switch cellIndices.count
    {
    case 0:
    return attributes
    case 1:
    mainIndexPath = cellIndices.first
    movingInIndexPath = nil
    default:
    let firstIndexPath = cellIndices.first
    if firstIndexPath == mainIndexPath
    {
    movingInIndexPath = cellIndices[1]
    }
    else
    {
    movingInIndexPath = cellIndices.first
    mainIndexPath = cellIndices[1]
    }
    }

    difference = collectionView.contentOffset.x - previousOffset

    previousOffset = collectionView.contentOffset.x

    attributes.forEach { applyTransform(to: $0) }

    return attributes
    }


  • En InterfaceBuilder, sélectionnes le UICollectionView dans la colonne à  gauche de la vue principale, cliques sur la flèche pour dérouler et sélectionnes le layout. Puis, dans l'inspecteur, remplaces le nom de la classe UICollectionViewFlowLayout avec le nom de ta classe.




     


    C'est magnifique ça fonctionne hyper bien

  • Merci beaucoup tout le monde pour l'aide apportée


  • SVP Savez-vous pourquoi j'ai ça sur un de mes projets ?


     


     


  • CéroceCéroce Membre, Modérateur
    À mon avis:
    L'affichage des CALayers est fait par Metal, donc ce sont des polygones 3D. Ce que tu observes, ce sont des triangles qui se croisent en "profondeur". Donc, je modifierais le positionnement sur l'axe z.

    Essaie de modifier cette ligne:
    t.m34 = 1.0 / -500
    J'ai l'impression que le facteur -500 a été trouvé de manière empirique. Essaie
    t.m34 = 1.0
    ou -1.

    Je n'ai pas le courage de vérifier le contenu m34 par cette chaleur.
  • Justement, ce qui est étonnant c'est que le premier et le dernier de mes cell s'affiche parfaitement bien. Et le meme code fonctionne parfaitement sur un autre projet qui certes vide pour le moment
  • rollanorollano Membre
    juin 2017 modifié #44

    À mon avis:

    L'affichage des CALayers est fait par Metal, donc ce sont des polygones 3D. Ce que tu observes, ce sont des triangles qui se croisent en "profondeur". Donc, je modifierais le positionnement sur l'axe z.


    Essaie de modifier cette ligne:



    t.m34 = 1.0 / -500

    J'ai l'impression que le facteur -500 a été trouvé de manière empirique. Essaie

    t.m34 = 1.0

    ou -1.


    Je n'ai pas le courage de vérifier le contenu m34 par cette chaleur.


    _______________


    Looooool je vais tester ça dès ce soir


  • Fonctionne pas malheureusement. 


  • CéroceCéroce Membre, Modérateur
    Pourrais-tu nous donner ce projet d'exemple où ça ne fonctionne pas ?
  • rollanorollano Membre
    juin 2017 modifié #47


    Pourrais-tu nous donner ce projet d'exemple où ça ne fonctionne pas ?




     


    C'est une application deja publier sur laquelle je cherche à  tester de nouvelle choses


     


     


    ####


     


    Bon je m'excuse par avance pour les pub looooooool





  •  


    Encore en phase de correction donc vraiment désoler pour les désagréments

  • Salut tout le monde,


    pour plus de precision, ci-joint une petite vidéo de demo :)


  • T'aimes bien les warnings, on dirais ..


     


    Oui, c'est typiquement un problème de profondeur. Les pixels dont la coordonnée z est en dessous de la coordonnée z du fond d'écran  sont affichés en-dessous !



  • T'aimes bien les warnings, on dirais ..


     


    Oui, c'est typiquement un problème de profondeur. Les pixels dont la coordonnée z est en dessous de la coordonnée z du fond d'écran  sont affichés en-dessous !




     


     


    On dirais seulement looool ça pic les yeux

  • C'est toujours casse-pieds de mélanger la 3D et la 2D pour ce genre de choses. As-tu vraiment besoin d'un effet 3D pour ton application ? Un simple effet de rotation n'est-il pas suffisant ?



  • C'est toujours casse-pieds de mélanger la 3D et la 2D pour ce genre de choses. As-tu vraiment besoin d'un effet 3D pour ton application ? Un simple effet de rotation n'est-il pas suffisant ?




     


    Non en effet, la présence de l'effet 3d dans l'appli IPoomsae n'est pas une obligation. Simplement, je trouvais cela plus sympa en vus du contenu un p trop barbant

  • CéroceCéroce Membre, Modérateur
    juin 2017 modifié #56


    Pourrais-tu nous donner ce projet d'exemple où ça ne fonctionne pas ?




     


    Je réitère: donne nous un projet d'exemple " DU CODE !!! " pour que nous puissions étudier ce qui ne va pas.


    Pas nécessaire de nous fournir tout le projet.




  • Je réitère: donne nous un projet d'exemple " DU CODE !!! " pour que nous puissions étudier ce qui ne va pas.


    Pas nécessaire de nous fournir tout le projet.




     


    Pas de soucis je vous envoi ça de suite

  • rollanorollano Membre
    juin 2017 modifié #58

    import UIKit

    class EpreuveListViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {




    @IBOutlet weak var epreuveListCollectionView: UICollectionView!



    // Les Array pour Collection View Pour les épreuves
    let epreuvesName = ["KIBON", "HANBON KYORUGI", "COMBAT : KYORUGI", "HO SHIN SOUL", "ARBITRAGE", "LA THEORIE", "LA BONIFICATION"]
    let epreuvesImageArr = [UIImage(named: "kibon"), UIImage(named: "hanbon"), UIImage(named: "combat"), UIImage(named: "back5"), UIImage(named: "arbitrage"), UIImage(named: "theorie"), UIImage(named: "back4"), UIImage(named: "Xback8"), UIImage(named: "Xback8")]

    // Les Array pour les subtitle des épreuves
    let epreuveSubTitleLabel = ["30 Points", "20 Points", "30 Points", "20 Points", "20 Points", "10 Points", "10 à  15 Points"]

    var myTransheadImageVar = ""

    var myTransBackgroungImageVar = ""


    override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.


    DispatchQueue.global(qos: .userInteractive).async {

    //La fonction ou code prioritaire
    self.WSGetImage()


    }



    // Add a background view to the table view
    let backgroundImage = UIImage(named: "background")
    let imageView = UIImageView(image: backgroundImage)

    imageView.contentMode = UIViewContentMode.scaleAspectFit

    self.epreuveListCollectionView.backgroundView = imageView


    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }



    //4 : Mark - Definit le nombre de section
    func numberOfSections(in collectionView: UICollectionView) -> Int {
    return self.epreuvesName.count
    }

    //5 : Mark - definit le nombre de row par section
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return 1//self.epreuvesName.count

    }



    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {


    let cell = epreuveListCollectionView.dequeueReusableCell(withReuseIdentifier: "epreuveCustumCell", for: indexPath) as! EpreuveListCollectionViewCell

    let indexSection = indexPath.section

    cell.layer.cornerRadius = 10
    cell.layer.borderColor = UIColor.black.cgColor
    cell.layer.borderWidth = 2

    cell.epreuveImageView.image = self.epreuvesImageArr[indexSection]

    cell.epreuveTitleLabel.text = self.epreuvesName[indexSection]

    cell.epreuveSubTitleLabel.text = self.epreuveSubTitleLabel[indexSection]

    return cell
    }


    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    switch (indexPath.section){
    case (0):
    performSegue(withIdentifier: "segueForEpreuve1", sender: self)
    break
    case (1):
    performSegue(withIdentifier: "segueForEpreuve2", sender: self)
    break
    case (2):
    performSegue(withIdentifier: "segueForEpreuve3", sender: self)
    break
    case (3):
    performSegue(withIdentifier: "segueForEpreuve4", sender: self)
    break
    case (4):
    performSegue(withIdentifier: "segueForEpreuve5", sender: self)
    break
    case (5):
    performSegue(withIdentifier: "segueForEpreuve6", sender: self)
    break
    case (6):
    performSegue(withIdentifier: "segueForEpreuve7", sender: self)
    break
    /*case (7):
    performSegue(withIdentifier: "segueForEpreuve8", sender: self)
    break*/
    default:
    print(indexPath.section)
    break
    }



    }


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "segueForEpreuve1"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! KibonV0TableViewController


    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!

    }else if segue.identifier == "segueForEpreuve2"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! HanbonV0TableViewController

    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!


    }else if segue.identifier == "segueForEpreuve3"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! KyorugiV0TableViewController


    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!

    }else if segue.identifier == "segueForEpreuve4"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! HoshinsoulV0TableViewController


    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!

    }else if segue.identifier == "segueForEpreuve5"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! ArbitrageV0TableViewController


    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!

    }else if segue.identifier == "segueForEpreuve6"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! TheorieV0TableViewController


    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!

    }else if segue.identifier == "segueForEpreuve7"{

    let indexPaths = self.epreuveListCollectionView.indexPathsForSelectedItems!
    let indexPath = indexPaths[0] as IndexPath

    let vc = segue.destination as! BonificationV0TableViewController


    vc.title = self.epreuvesName[indexPath.section]
    vc.image = self.epreuvesImageArr[indexPath.section]!

    }




    }



    //1 - JSON DATA
    private func WSGetImage() {

    JsonManager.shared.get(url: "http://site.com/theme.json") {(Result) in

    switch Result {

    case .error(let msg):
    print("Error : \(msg)")

    case .success(let json):
    print(json) // array of dictionary


    if let poomsaeInfos = json["theme"] as? [[String: AnyObject]] {

    for items in poomsaeInfos {


    //background
    /**********/
    if let newItem3 = items["epreuveCollectionViewBackgroundImageUrl"] as? String {

    let variable3 = newItem3

    self.myTransBackgroungImageVar = variable3

    print("myTransBackgroungImageVar", self.myTransBackgroungImageVar)


    /********/

    let url = URL(string: self.myTransBackgroungImageVar)

    if url == nil{

    // Add a background view to the table view
    let backgroundImage = UIImage(named: "background")
    let imageView = UIImageView(image: backgroundImage)

    imageView.contentMode = UIViewContentMode.scaleAspectFit

    self.epreuveListCollectionView.backgroundView = imageView



    }else{
    do{

    let data = try? Data(contentsOf: url!)

    if data != nil{

    DispatchQueue.main.async(execute: {

    let image = UIImage(data: data!)

    let imageView = UIImageView(image: image)

    imageView.contentMode = UIViewContentMode.scaleAspectFit

    self.epreuveListCollectionView.backgroundView = imageView

    })
    }else {

    print("Pas de Data Rolland")
    }

    }

    }//if else url nil
    }
    /**********/

    }

    }

    }
    }//Switch in result


    }

    }
  • CéroceCéroce Membre, Modérateur

    Pourrais-tu plutôt nous donner un projet Xcode, qu'on puisse le faire tourner tout de suite et l'étudier au débogueur ?




  • Pourrais-tu plutôt nous donner un projet Xcode, qu'on puisse le faire tourner tout de suite et l'étudier au débogueur ?




     


     


    Ok je vais faire ça

  • LarmeLarme Membre
    juin 2017 modifié #61

    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.


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