[Résolu] NSBox dérivée

berfisberfis Membre
mai 2013 modifié dans API AppKit #1
Bonjour,

 

J'aimerais dériver NSBox pour obtenir ceci:

Réponses


  •  



    Methods to Override

    You must override the drawRect: method (inherited from NSView) if you want to customize the appearance of your NSBox objects. Depending on the visual effect you're trying to achieve, you may have to invokesuper's implementation first. For example, if you are compositing a small image in a corner of the box, you would invoke the superclass implementation first. If you're adding a new style of line, you would provide a way to store a request for this line type (such as a boolean instance variable and related accessor methods). Then, in drawRect:, if a request for this line type exists, you would draw the entire view yourself (that is, without calling super). Otherwise, you would invoke the superclass implementation.


     



     


    Pour les dégragée utilise NSGradient.


    Pour les lignes utilise NSBezierPath.


    Pour le titre utilise drawAtPoint de NSAttributedString.


  • Merci mpergand,


     


    Oui, j'ai une version qui utilise tout ça, il y a juste... comment faire le bézier du "demi-rectangle arrondi"? Par exemple, la "barre de titre" est arrondie en haut mais plate en bas. On fait comment?


  • MonsieurPaulMonsieurPaul Membre
    avril 2013 modifié #4

    Le mieux AMHA serait de contruire un NSBezierPath en utilisant la fonction appendBezierPathWithArcFromPoint:toPoint:radius: pour les coins arrondis.


     


    Cela peut être intéressant de télécharger la version démo de PaintCode. Cela permet d'apprendre pas mal de choses sur CoreGraphics.


  • Tu construis un path avec la méthode appendBezierPathWithArcFromPoint:toPoint:radius: pour les coins arrondis.

  • Matt Gemmel avait un box arrondi dans ce style,


     


    voir ici http://mattgemmell.com/2005/11/02/roundedbox-nsbox-subclass/

  • Merci à  vous trois !


     


    J'ai regardé vos exemples, tâtonné comme un idiot avec les coordonnées des arcs avant de me souvenir que le rayon d'un cercle est constant  :*


    Pour le gradient, c'est joli comme tout (j'ai failli dire simple... avant d'inverser les couleurs de départ et d'arrivée) et ça donne ceci pour l'instant. Je me rapproche du but, grâce à  vous!


     


  • berfisberfis Membre
    avril 2013 modifié #8

    Version 2.

     

    J'ai revu le gradient pour qu'il soit plus conforme, et détourné la propriété de NSBox titleLocation pour n'avoir qu'une classe, avec ou sans barre inférieure.

     


  • HerveHerve Membre

    Les classes NSBezierPath et NSColor sont assez complètes et permettent de faire beaucoup de choses. A la rigueur tu complètes avec CoreImage si tu as besoin d'effets spéciaux (monochrome, filtres variés, effets, etc.), mais lis la doc de NSBezierPath, elle est bien faite.


     


    https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40003290

  • Comment indiquer [Résolu] sur un sujet?




  • Comment indiquer [Résolu] sur un sujet?




     


    Selon mon souvenir, tu édites ton premier post avec option avancée (ou un truc dans le genre) et là  tu met à  jour ton titre.

  • Bonne mémoire, Kubernan! ça marche, merci!


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