Ombre pour une NSView
Fred20
Membre
Bonjour à tous
J'ai un souci au sujet de la création d'ombre sur un objet, en l'occurrence ici un NSView. La doc et les forums démontrent que sa mise en oeuvre est facile mais chez moi, ça ne marche pas. Qu'est ce que j'ai oublié ??
Voici le code :
Merci d'avance
J'ai un souci au sujet de la création d'ombre sur un objet, en l'occurrence ici un NSView. La doc et les forums démontrent que sa mise en oeuvre est facile mais chez moi, ça ne marche pas. Qu'est ce que j'ai oublié ??
Voici le code :
<br />
NSShadow *shadow = [[NSShadow alloc] init];<br />
[shadow setShadowOffset:NSMakeSize(7,-7)];<br />
[shadow setShadowBlurRadius:20.0];<br />
[shadow setShadowColor:[NSColor colorWithDeviceWhite:0.5 alpha:0.3]];<br />
[shadow set];<br />
<br />
[mavue setShadow:shadow];<br />
Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
@Fred20 ça me paraà®t bon, même si je l'ai utilisé il y a bien longtemps. A priori, ce sont surtout tes paramètres qui sont réglés un peu fort:
Tu n'as pas besoin d'appeler -set. La méthode sert à appliquer l'ombre avant de faire un dessin (voir la doc de Core Graphics).
@Fred : Je pense que ça aidera tout le monde si tu indique depuis quel endroit tu essaie d'appliquer un shadow. D'ailleurs, le problème dois venir de là a mon avis.
Donc, la vue doit utiliser une CALayer.
Essaie:
Mais ça ne marche pas. Est ce que cela viendrait des valeurs des positions ?
En fait, je ne veux pas entrer dans les détails de Core Animation sur Mac, que je ne suis pas sûr de pouvoir t'expliquer, mais il y a deux modes de fonctionnement différents, selon qu'on appelle setWantsLayer: avant de fournir une layer ou non.
Dans la plupart des cas, tu as juste à faire setWantsLayer:YES, et ça te crée une "Backing layer" qui conservera la taille de la vue.
Crée toi-même le xib. Il s'agit du XIB du template avec deux différences:
- j'ai ajouté une instance de CEOvalView
- j'ai coché la layer pour la fenêtre
Sinon, j'essaye de créer ce xib
Merci encore
En pièce jointe mon projet. Si tu as un peu de temps pour y jeter un coup d'oeil.
Merci d'avance
2) Pour l'imageView: retire setWantsLayer:YES de ton code et coche la case dans le XIB, pour que ce soit la contentView de la fenêtre qui ait une layer.
C'est cette case qu'il faut cocher:
Merci encore
et sans doute A+