Aller au contenu


Photo

Comment dessiner des lignes et écrire du texte sur une image


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

#1 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 16 juillet 2017 - 13:38

Bonjour,

 

J'ai importé des graphiques d'internet et je voudrais les "agrémenter" d'annotations et de tracés verticaux représentant les heures de la journée pour ensuite enregistrer le tout.

 

J'ai déjà trouvé comment créé des ligne verticales mais je n'arrive pas à changer la couleur.

Voici le code de mon projet :


import Cocoa

final class Line: NSView {
    override func draw(_ dirtyRect: NSRect) {
        let myPath = NSBezierPath()
        myPath.move(to: CGPoint(x: 20, y: 20))
        myPath.line(to: CGPoint(x: 20, y: 300))
        myPath.lineWidth = 0.3
        myPath.stroke()
    }
}

final class ViewController: NSViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Représention de l'image ou image extraite d'un fichier
        let frame = CGRect(x: 0, y: 0, width: 100, height: 600)
        
        // Incrustation dans l'image sélectionnée
        let line = Line(frame: frame)
        view.addSubview(line)
    }
    
    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }
    
}

Se sont des lignes de codes que j'ai récupérées et dont je comprends le cheminement.

Là, maintenant j'aimerais

. Changer la couleur de la ligne,

. écrire un texte dedans, 

. et sauvegarder le tout.

 

Merci



#2 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 16 juillet 2017 - 17:41

Je n’ai pas le temps de me pencher sur la question, maintenant. Mais le sujet a été abordé souvent dans les pages du forum. Il faut utiliser un contexte graphique et/ou la fonction drawRect() draw() des views. Fait une recherche sur ces thèmes dans le forum. Les réponses y sont nombreuses.

 

EDIT : fichu macOS ! iOS c’est mieux quand même .. * évite la chaussure de Tablier *


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#3 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 16 juillet 2017 - 17:57

Ok, je vais faire comme çà

 

merci



#4 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 16 juillet 2017 - 21:50

Un premier jet pour afficher une vue « composite » formée d’une image et d’un ensemble de lignes.

 

C’est une NSView personnalisée avec deux paramètres : 

- une NSImage?

- un tableau de lignes

 

Les lignes sont définies dans une structure TypeLigne :

- premier point

- second point

- épaisseur

- couleur

import Foundation
import Cocoa

struct TypeLigne {
    var point1  : NSPoint
    var point2  : NSPoint
    var width   : CGFloat
    var couleur : NSColor
}

class ViewAvecCalque : NSView {
    var image : NSImage?
    var listeLignes : [TypeLigne]?
    
    override func draw(_ dirtyRect: NSRect) {
        let rect = dirtyRect
        // let context = NSGraphicsContext.current()
        // Si l'image existe on la dessine sur la vue
        if let image = image {
            image.draw(in: rect)
        }
        // Si les lignes existent on les dessines sur la vue
        if let lesLignes = listeLignes {
            for ligne in lesLignes {
                let path = NSBezierPath()
                ligne.couleur.set()
                path.move(to: ligne.point1)
                path.line(to: ligne.point2)
                path.lineWidth = ligne.width
                path.stroke()
            }
        }
        
    }
    
}

Exemple d’utilisation :

//
//  ViewController.swift
//  OSX_VueComposite
//

import Foundation
import Cocoa

class ViewController: NSViewController {
    
    var maVue = ViewAvecCalque()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Création de la vue
        maVue.frame = CGRect(x: 100, y: 40, width: 200, height: 200)
        self.view.addSubview(maVue)
        
        // Définition image
        maVue.image = NSImage.init(named: "BlueSky")
        
        // Définition lignes
        maVue.listeLignes = creerLignes()
        
    }
    
    func creerLignes() -> [TypeLigne] {
        
        // Ligne Rouge
        let ligne1 = TypeLigne(point1: NSMakePoint(0,0),
                               point2: NSMakePoint(100,100),
                               width: 3.0,
                               couleur: NSColor.red)
        
        // Ligne Bleu
        let ligne2 = TypeLigne(point1: NSMakePoint(0, 0),
                               point2: NSMakePoint(100, 150),
                               width: 3.0,
                               couleur: NSColor.blue)
        
        // Stockage des lignes dans un tableau
        var tableauLignes = [TypeLigne]()
        tableauLignes.append(ligne1)
        tableauLignes.append(ligne2)
        
        return tableauLignes
        
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

Fichier(s) joint(s)


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#5 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 16 juillet 2017 - 22:29

Nouvelle version avec les textes. Chaque texte est défini par une position et un NSAttributedString (une version évoluée de String pouvant encapsuler du texte, des informations de couleurs, des polices de caractères, des informations de formatage, etc.. Un outil puissant, mais pas spécialement simple d'emploi). On en parle dans plusieurs sujets sur le forum.

import Foundation
import Cocoa

struct TypeLigne {
    var point1  : NSPoint
    var point2  : NSPoint
    var width   : CGFloat
    var couleur : NSColor
}

struct TypeTexte {
    var point : NSPoint
    var text  : NSAttributedString
}

class ViewAvecCalque : NSView {
    var image : NSImage?
    var listeLignes : [TypeLigne]?
    var listeTextes : [TypeTexte]?
    
    override func draw(_ dirtyRect: NSRect) {
        let rect = dirtyRect
        
        // Si l'image existe on la dessine sur la vue
        if let image = image {
            image.draw(in: rect)
        }
        
        // Si les lignes existent on les dessines sur la vue
        if let lesLignes = listeLignes {
            for ligne in lesLignes {
                let path = NSBezierPath()
                ligne.couleur.set()
                path.move(to: ligne.point1)
                path.line(to: ligne.point2)
                path.lineWidth = ligne.width
                path.stroke()
            }
        }
        
        // Si les textes existent, on les dessines
        if let lesTextes = listeTextes {
            for texte in lesTextes {
                texte.text.draw(at: texte.point)
            }
        }
        
    }
    
}

Mise en oeuvre :

//
//  ViewController.swift
//  OSX_VueComposite
//

import Foundation
import Cocoa

class ViewController: NSViewController {
    
    var maVue = ViewAvecCalque()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Création de la vue
        maVue.frame = CGRect(x: 100, y: 40, width: 200, height: 200)
        self.view.addSubview(maVue)
        
        // Définition image
        maVue.image = NSImage.init(named: "BlueSky")
        
        // Définition lignes
        maVue.listeLignes = creerLignes()
        
        // Textes
        maVue.listeTextes = creerTextes()
        
    }
    
    func creerLignes() -> [TypeLigne] {
        
        // Ligne Rouge
        let ligne1 = TypeLigne(point1: NSMakePoint(0,0),
                               point2: NSMakePoint(100,100),
                               width: 3.0,
                               couleur: NSColor.red)
        
        // Ligne Bleu
        let ligne2 = TypeLigne(point1: NSMakePoint(0, 0),
                               point2: NSMakePoint(100, 150),
                               width: 3.0,
                               couleur: NSColor.blue)
        
        // Stockage des lignes dans un tableau
        var tableauLignes = [TypeLigne]()
        tableauLignes.append(ligne1)
        tableauLignes.append(ligne2)
        
        return tableauLignes
        
    }
    
    func creerTextes() -> [TypeTexte] {
        let t1 = TypeTexte(point: NSMakePoint(100, 100),
                           text: NSAttributedString(string:"San Fransisco"))
        let t2 = TypeTexte(point: NSMakePoint(50, 150),
                           text: NSAttributedString(string:"Boston"))
        var tableau = [TypeTexte]()
        tableau.append(t1)
        tableau.append(t2)
        return tableau
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

Pour paramétrer les textes (font, taille, couleur) il faut entrer dans les détails des NSAttributedString. Pas le temps ce soir. J’ai rendez-vous avec un Arrow Saison 5 sur Netflix (épisode S5x08 avec des envahisseurs aliens. C’est un super crossover de la chaine The CW faisant intervenir les personnages de ses 4 séries de supers héros - Arrow, Flash, SuperGirl et Legends of Tomorrow)

Fichier(s) joint(s)

  • Fichier joint  texte.jpg   75,75 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#6 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 16 juillet 2017 - 22:38

Il n’y a pas de solution simple pour faire une copie d’écran d’une NSView. Voici un lien avec quelques lignes de code pour y arriver :

 

https://pastebin.com/d4puXBi8


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#7 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 17 juillet 2017 - 10:11

Variante avec définition des textes incluant :

- position

- String

- Font

- couleur d'affichage

 

Le système génère un NSAttributedString à la volée lors de l’affichage.

import Foundation
import Cocoa

struct TypeLigne {
    var point1  : NSPoint
    var point2  : NSPoint
    var width   : CGFloat
    var couleur : NSColor
}

struct TypeTexte {
    var point   : NSPoint
    var text    : String
    var police  : NSFont
    var couleur : NSColor
}

class ViewAvecCalque : NSView {
    var image : NSImage?
    var listeLignes : [TypeLigne]?
    var listeTextes : [TypeTexte]?
    
    override func draw(_ dirtyRect: NSRect) {
        let rect = dirtyRect
        
        // Si l'image existe on la dessine sur la vue
        if let image = image {
            image.draw(in: rect)
        }
        
        // Si les lignes existent on les dessines sur la vue
        if let lesLignes = listeLignes {
            for ligne in lesLignes {
                let path = NSBezierPath()
                ligne.couleur.set()
                path.move(to: ligne.point1)
                path.line(to: ligne.point2)
                path.lineWidth = ligne.width
                path.stroke()
            }
        }
        
        // Si les textes existent, on les dessines
        if let lesTextes = listeTextes {
            for texte in lesTextes {
                let attrTexte = NSAttributedString(
                    string: texte.text,
                    attributes: [
                        NSFontAttributeName : texte.police,
                        NSForegroundColorAttributeName : texte.couleur
                    ])
                attrTexte.draw(at: texte.point)
            }
        }
        
    }
    
}

Mise en application :

import Foundation
import Cocoa

class ViewController: NSViewController {
    
    var maVue = ViewAvecCalque()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Création de la vue
        maVue.frame = CGRect(x: 100, y: 40, width: 200, height: 200)
        self.view.addSubview(maVue)
        
        // Définition image
        maVue.image = NSImage.init(named: "BlueSky")
        
        // Définition lignes
        maVue.listeLignes = creerLignes()
        
        // Textes
        maVue.listeTextes = creerTextes()
        
    }
    
    func creerLignes() -> [TypeLigne] {
        
        // Ligne Rouge
        let ligne1 = TypeLigne(point1: NSMakePoint(0,0),
                               point2: NSMakePoint(100,100),
                               width: 3.0,
                               couleur: NSColor.red)
        
        // Ligne Bleu
        let ligne2 = TypeLigne(point1: NSMakePoint(0, 0),
                               point2: NSMakePoint(100, 150),
                               width: 3.0,
                               couleur: NSColor.blue)
        
        // Stockage des lignes dans un tableau
        var tableauLignes = [TypeLigne]()
        tableauLignes.append(ligne1)
        tableauLignes.append(ligne2)
        
        return tableauLignes
        
    }
    
    func creerTextes() -> [TypeTexte] {
        
        let t1 = TypeTexte(point: NSMakePoint(50, 150),
                           text: "San Fransisco",
                           police: NSFont.boldSystemFont(ofSize: 17.0),
                           couleur: NSColor.blue)
        
        let t2 = TypeTexte(point: NSMakePoint(100, 100),
                           text: "Boston",
                           police: NSFont.systemFont(ofSize: 15.0),
                           couleur: NSColor.red)
   
        var tableau = [TypeTexte]()
        tableau.append(t1)
        tableau.append(t2)
        return tableau
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

}

Fichier(s) joint(s)

  • Fichier joint  textes2.jpg   76,14 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#8 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 17 juillet 2017 - 10:28

Petit détail : Je n’ai pas vérifié, mais je présume qu’en cas de modifications des données, il faut utiliser needsDisplay pour dire à la NSView que son contenu n’est plus valable, et qu’elle doit se redessiner.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#9 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 17 juillet 2017 - 11:36

Merci, je vais pouvoir étudier tout cela et le mettre en application.

 

A+



#10 fleurantin

fleurantin

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 110 messages

Posté 17 juillet 2017 - 16:09

Au lieu de recalculer à chaque mise à jour les NSBezierPath à dessiner il peut être plus simple de les calculer une fois pour toutes et de faire un simple [NSBezierPath store] à chaque mise à jour. D'autant plus que les paramètres de dessin épaisseur (lineWidth), type de raccord (lineCapStyle,lineJoinStylemiterLimit etc) et pointillé (LineDash) peuvent rester associé au NSBezierPath mais pas la couleur !

En plus NSBezierPath conforms to NSCoding

donc sauvegarde et lecture automatiques.


____________________________________________________________

:P L'expérience est une lanterne accrochée dans notre dos qui n'éclaire que le chemin parcouru. (Confucius) 


#11 fleurantin

fleurantin

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 110 messages

Posté 17 juillet 2017 - 16:11

Il fallait lire [NSBezierPath stoke] et non pas [NSBezierPath store] bien sûr ! (maudit correcteur)


____________________________________________________________

:P L'expérience est une lanterne accrochée dans notre dos qui n'éclaire que le chemin parcouru. (Confucius) 


#12 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 324 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 17 juillet 2017 - 16:58

Tu voulais dire -[NSBezierPath stroke], non ?  ;-)


RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#13 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 17 juillet 2017 - 22:14

Magnifique le tuto, j'ai déjà inséré la plus part de mes lignes dans mes graphs mais comme je ne connais pas le nombre peut différé pour chaque graph, je suis obliger de modifier un peu le code pour automatiser la chose. J'avance de plus en plus dans ce logiciel et ce n'est que le début.

 

Merci à tous, allez j'y retourne.



#14 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juillet 2017 - 10:16

Au lieu de recalculer à chaque mise à jour les NSBezierPath à dessiner il peut être plus simple de les calculer une fois pour toutes et de faire un simple [NSBezierPath store] à chaque mise à jour. D'autant plus que les paramètres de dessin épaisseur (lineWidth), type de raccord (lineCapStyle,lineJoinStylemiterLimit etc) et pointillé (LineDash) peuvent rester associé au NSBezierPath mais pas la couleur !

En plus NSBezierPath conforms to NSCoding

donc sauvegarde et lecture automatiques.

Oui, c’est largement perfectible avec différentes optimisations. On peut aussi modifier le système de positionnement dans la vue, utilisant des coordonnées exprimés en pourcentage, plutôt qu’en valeurs absolue, de manière à permettre le redimensionnement de l’image. Quoi que c’est peut-être moins utile sous macOS que sous iOS.

// Point à 20% de la largeur de l'image
// et 75% de sa hauteur
let point = NSMakePoint(0.2,0.75) 

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#15 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 18 juillet 2017 - 14:57

j'ai une question toujours sur le positionnement de mes lignes verticales, voilà :

 

j'ai 3 imageViews l'une au-dessus de l'autre, de même dimension contenant les graphiques et bien entendu mes lignes ne vont pas toutes dans la même imageView. Comment faire ?

 

Une idée

 

Je pose la question non sans avoir tenté quelque chose, évidemment 



#16 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juillet 2017 - 15:35

Une superposition de 3 imagesview  ??? ? Tu n’as pas peur que le contenu de la première soit totalement caché par les deux autres ?

 

C’est difficile de te conseiller sans en savoir davantage sur ton application. Les lignes et les textes d’une imageview peuvent-ils être partiellement effacés par les vues situées plus haut, ou sont-elles prioritaires sur les graphismes ?

 

Tu as trois architectures possibles :

 

- a/ le sandwich

 

   - Fond d'écran

    - imageView1

    - VuePersonnalisée1 pour les lignes et les textes de l’image 1

    - imageView2

    - VuePersonnalisée2 pour les lignes et les textes de l’image 2

    - imageView3

   - VuePersonnalisée3 pour les lignes et les textes de l’image 3

 

Inconvénient : les lignes et les textes d’une couche peuvent être recouverts par une autre

 

- b/ la pile d'assiettes

 

   - Fond d'écran

   - imageView1

   - imageView2

   - imageView3

   - VuePersonnalisée1 pour les lignes et les textes de l’image 1

   - VuePersonnalisée2 pour les lignes et les textes de l’image 2

   - VuePersonnalisée3 pour les lignes et les textes de l’image 3

 

- c/ Le couvercle

 

   - Fond d'écran

   - imageView1

   - imageView2

   - imageView3

   - VuePersonnalisée regroupant TOUTES  les illustrations ( lignes et les textes) 


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#17 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 18 juillet 2017 - 16:42

J'ai réfléchi et je crois que je vais faire une seule imageView regroupant les trois graphiques et positionner mes lignes verticales en changeant l'origine des y à volonté.

Ce sera surement plus simple mais encore faut-il que j'arrive à le faire  :unsure:  :unsure:

mais bon.

 

Je vous tiens au courant.

 

Merci



#18 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juillet 2017 - 18:40

J'ai réfléchi et je crois que je vais faire une seule imageView regroupant les trois graphiques et positionner mes lignes verticales en changeant l'origine des y à volonté.

 

J’ai cru comprendre que toutes tes images avaient la taille. Et maintenant tu parles de changer la position des lignes en modifiant l’origine des y. Est-ce que tu fabrique tes images en assemblant verticalement des graphismes, dans ce style ?

 

++++++++++++++++++++++++++

+   Image 1 : Haut du graphisme  +

++++++++++++++++++++++++++

+  Image 2 : Milieu du graphisme +

++++++++++++++++++++++++++

+  Image 3 : Bas du graphisme     +

++++++++++++++++++++++++++

 

Avec des éléments graphique de base :

 

++++++++++++++++++++++++++

+   Image 1 : Haut du graphisme  +

++++++++++++++++++++++++++

+                                                    +

+             TRANSPARENCE           +

+                                                    +

++++++++++++++++++++++++++

 
++++++++++++++++++++++++++

+           TRANSPARENCE             +

++++++++++++++++++++++++++

+  Image 2 : Milieu du graphisme +

++++++++++++++++++++++++++

+            TRANSPARENCE           +

++++++++++++++++++++++++++

 
++++++++++++++++++++++++++

+                                                    +

+            TRANSPARENCE            +

+                                                    +

++++++++++++++++++++++++++

+  Image 3 : Bas du graphisme     +

++++++++++++++++++++++++++

 

EDIT : Ah zut, ce n’est pas facile d’aligner les lettres pour dessiner des cadres de même taille, le forum n’utilisant pas la même police pour l’édition et l’affichage des posts terminés. Enfin, tant que cela reste compréhensible ..


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#19 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 18 juillet 2017 - 22:32

En fait, j'ai 1 graph avec une tranche horaire de 8:00 à 11:00

en dessous 1 graph avec la tranche horaire de 11:00 à 14:00

et en dessous 1 graph avec la tranche horaire de 14:00 à 17:45

donc les lignes dont l'horaire est compris entre 8:00 et 11:00 vont s'afficher dans le 1er graph,

les lignes dont l'horaire est compris entre 11:00 et 14:00 vont s'afficher dans le 2ème graph,

les lignes dont l'horaire est compris entre 14:00 et 17:45 vont s'afficher dans le 3ème graph.
 
Je sais c'est un peu compliqué à faire, j'ai déclaré dans Main StoryBoard les 3 imageViews et créé les outlets correspondants.
 
Je n'arrive pas à adapter ton code, il est pourtant clair mais que pour 1 seule image.


#20 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juillet 2017 - 23:41

Bin non, c’est facile à faire. Il suffit d’utiliser Storyboard pour placer une vue personnalisée au-dessus de chaque imageView, et récupérer 3 nouveaux outlets. Ce n’est pas bien loin à faire. Je t’explique ça demain.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 





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

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