¿Cómo puedo utilizar NSVisualEffectView en la ventana de la barra de título?

En OS X Yosemite, Apple introdujo una nueva clase NSVisualEffectView. En la actualidad, esta clase es indocumentados, pero lo podemos utilizar en el Interface Builder.

¿Cómo puedo utilizar NSVisualEffectView en la barra de título de ventana?

Aquí el ejemplo: en Safari, al desplazarse, el contenido aparece en la barra de herramientas y barra de título con una intensidad y el efecto de desenfoque.

¿Cómo puedo utilizar NSVisualEffectView en la ventana de la barra de título?

Afortunadamente, la documentación de la API para NSVisualEffectView no existen en la actualidad, para cualquier persona interesada: developer.apple.com/library/mac/documentation/Foundation/…

OriginalEl autor Nikolai Nagornyi | 2014-06-25

3 Kommentare

  1. 19

    @sgonzalez la respuesta que me obligó a explorar NSWindow.h archivo donde he encontrado titlebarAppearsTransparent de la propiedad.

    Así tenemos:

    class BluredWindow: NSWindow {
    
        override func awakeFromNib() {
    
        let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 300, 180))
        visualEffectView.material = NSVisualEffectView.Material.dark
        visualEffectView.blendingMode = NSVisualEffectView.BlendingMode.behindWindow
        visualEffectView.state = NSVisualEffectView.State.active
    
        self.styleMask = self.styleMask | NSFullSizeContentViewWindowMask
        self.titlebarAppearsTransparent = true
        //self.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
    
    
    
        self.contentView.addSubview(visualEffectView)
    
        self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[visualEffectView]-0-|", 
                                                                       options: NSLayoutConstraint.FormatOptions.directionLeadingToTrailing,
                                                                       metrics: nil, 
                                                                       views: ["visualEffectView":visualEffectView]))
    
        self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[visualEffectView]-0-|",
                                                                       options: NSLayoutConstraint.FormatOptions.directionLeadingToTrailing, 
                                                                       metrics: nil, 
                                                                       views: ["visualEffectView":visualEffectView]))
    

    También puede configurar NSVisualEffectView en IB será ampliado en la barra de título.

    Me encantaría ver este Objetiva de la versión en C para ver si funciona con OS 10.8 y hasta en un Cacao de la aplicación.
    NSVisualEffectView clase fue introducido en OS X 10.10.
    Por desgracia, mi cliente requiere que mi aplicación funciona en 10.8. Así, NSVisualEffectView no funciona para mí. Sin embargo, yo ¿implementarlo como una prueba y funciona, al menos en 10.10.
    ¿Cómo puedo dar color con visualeffect ? He hecho un poco de r&d y se encontró que necesitamos un bucle a través de las subcapas de visualEffectView donde tenemos nombre de la capa «ClearCopyLayer» y la necesidad de dar color a esta capa. Hay de los demás ?
    lo sentimos, pero no te entiendo.

    OriginalEl autor Nikolai Nagornyi

  2. 17

    Necesita modificar su ventana stylemask incluir NSFullSizeContentViewWindowMask por lo que su contenido puede ver «desbordamiento».

    Usted puede lograr esto fácilmente mediante la adición de esta línea a su AppDelegate:

    self.window.styleMask = self.window.styleMask | NSFullSizeContentViewWindowMask;
    

    Si quieres que aparezca oscuro, como FaceTime, también es necesario añadir esta línea de código:

    self.window.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
    
    Gracias @sgonzalez! Su respuesta me empujó en el camino correcto!!!
    También hay una casilla de verificación en IB, sólo tienes que seleccionar la Ventana, en la WindowController en el principal storyboard, y de verificación de «Tamaño Completo ContentView» en los atributos del inspector.
    Tenga en cuenta que usted también consigue esto de forma gratuita si usted realiza un desplazamiento de la vista a ras contra el título/barra de herramientas. Véase también la WWDC 2014 de la Sesión 220

    OriginalEl autor sgonzalez

  3. 9

    Tutorial paso a paso con ejemplos:

    http://eon.codes/blog/2016/01/23/Chromeless-window/

    La configuración de la translucencia:

    1. Conjunto de la styleMask de su NSWindow subclase NSFullSizeContentViewWindowMask (de modo que la translucencia también será visible en la barra de título de la zona, dejar esto y la barra de título podrán ser en blanco)
    2. Conjunto de la self.titlebarAppearsTransparent = true (oculta la barra de título predeterminado de gráficos)
    3. Agregar el código de abajo para su NSWindow subclase: (ahora debería tener una ventana translúcida)

    .

    let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 0, 0))//<---the width and height is set to 0, as this doesn't matter. 
    visualEffectView.material = NSVisualEffectMaterial.AppearanceBased//Dark,MediumLight,PopOver,UltraDark,AppearanceBased,Titlebar,Menu
    visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow//I think if you set this to WithinWindow you get the effect safari has in its TitleBar. It should have an Opaque background behind it or else it will not work well
    visualEffectView.state = NSVisualEffectState.Active//FollowsWindowActiveState,Inactive
    self.contentView = visualEffectView/*you can also add the visualEffectView to the contentview, just add some width and height to the visualEffectView, you also need to flip the view if you like to work from TopLeft, do this through subclassing*/
    

    ¿Cómo puedo utilizar NSVisualEffectView en la ventana de la barra de título?

    También le permite crear cromo-menos de windows que son translúcidas:

    ¿Cómo puedo utilizar NSVisualEffectView en la ventana de la barra de título?

    actualizado. Enfermo añadir algunos más más tarde. Como cómo usted puede hacerlo chrom-menos.
    Esta debe ser la respuesta. Es la más completa.
    Será más completa. Poner fin a la confusión acerca de la translucencia mystiques. Me dan 1-2weeks. Lo que quiero ordenar es cómo se pueden combinar diferentes translucencies por encima de simpatia, hay 2 tipos puede superponer. Creo Safari barra de título y de fondo de una página vacía de la zona. Estad atentos.
    Añadido un Github esencia, la caída de este código en la clase AppDelegate y usted tiene un trabajo con ventanas translúcidas: gist.github.com/eonist/0c3cb90b5ad9ebcea83a

    OriginalEl autor eonist

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea