2010-08-06 14 views
2

Par défaut, Cocoa ajoute un effet de flou d'arrière-plan aux feuilles modales transparentes et semi-transparentes lorsqu'elles sont appliquées à une fenêtre. Je voudrais désactiver l'effet de flou. Comment pourrais-je y aller?Comment puis-je supprimer l'effet "flou" que Cocoa ajoute aux feuilles transparentes?

J'ai créé une feuille personnalisée (une sous-classe de NSWindow avec un arrière-plan transparent et quelques contrôles). Je suis en mesure d'afficher en utilisant la méthode beginSheet standard suivante:

[NSApp beginSheet:myCustomSheet 
    modalForWindow:mainWindow 
    modalDelegate:self 
    didEndSelector:...]; 

La feuille affiche bien, mais tout derrière elle est floue.

Note 1: Je suis en train d'écrire une interface utilisateur entièrement personnalisée pour une application de type écran tactile/kiosque, donc aucune des directives habituelles de l'interface utilisateur Apple ne s'applique.

Note 2: Je ne veux voir ce qui est en dessous de la feuille. Comme souligné par SirRatty, il est possible de bloquer la partie floue en remplissant le fond. Dans mon cas, je veux que l'arrière-plan soit visible, juste sans paraître flou.

+0

J'ai de vagues soupçons que j'essaierai d'examiner plus tard, mais pour info, j'ai le sentiment fort que cela impliquerait des fonctions privées non documentées. – Chuck

Répondre

1

Ce que je l'ai fait:

Dans IB, ajoutez une mesure de taille fenêtre NSView à la fenêtre, en bas de l'affichage du contenu hiérarchie. Définissez la classe de l'objet sur MySolidView (ou autre.)

Dans Xcode, la classe MySolidView ne fait qu'une chose: sur -drawRect, elle remplit la vue d'une couleur unie. (par exemple, gris clair).

+0

Je suppose que vous parlez d'ajouter cette vue de suppression à la feuille, pour bloquer tout ce qui se trouve en dessous, annulant ainsi le flou? Si c'est le cas, c'est une solution raisonnable, mais je veux vraiment que l'arrière-plan transparaisse. Juste pas floue. Je suis picky ':)' –

+0

Oh, désolé, mon mauvais. Dans ce cas, je ne peux pas vous aider.Je ne connais aucun moyen de désactiver ce flou (ce que je suppose est un effet CoreImage). – SirRatty

+0

Il semble vraiment qu'il ne peut pas être modifié sans piratage dans le fonctionnement interne de AppKit. Merci d'avoir pris le temps de répondre, cependant. J'aurais probablement dû être plus clair dans la question. –

6

Il y a un appel d'API privée qui peut être utilisé pour définir un filtre de CI sur l'arrière-plan d'une fenêtre:

http://www.mail-archive.com/[email protected]/msg16280.html

Il y a aussi un CGSRemoveWindowFilter:

extern CGError CGSRemoveWindowFilter(CGSConnectionID cid, CGSWindowID wid, CGSWindowFilterRef filter);

Juste être sachant que les avertissements API habituels s'appliquent (peuvent disparaître ou changer à l'avenir, etc.).

1

Vous pouvez écrire vos propres routines d'animation de feuille qui affichent votre propre NSWindow et remplissent l'arrière-plan de la fenêtre avec une couleur semi-transparente. Je ne suis pas sûr si setAlphaValue: pour NSWindow affectera également l'opacité des éléments enfants. Si cela les affecte, vous pouvez utiliser setBackgroundColor: et fournir la couleur d'arrière-plan de la fenêtre par défaut, mais avec un composant alpha, cela ne devrait pas affecter les éléments enfants.

Je suppose que l'un des problèmes de développement/conception de votre propre interface utilisateur est lorsque vous devez réimplémenter la roue juste pour une personnalisation mineure. Au moins, si vous l'écrivez vous-même, vous aurez plus de contrôle sur sa personnalisation à l'avenir.