En Yosemite, las barras laterales tienen un semitransparentes «vibrante» de fondo. ¿Cómo puedo crear una vista como la que en 10.10/Xcode 6?

Puedo dar a cualquier vista de tales antecedentes? He encontrado que NSOutlineView defecto a tales antecedentes, cuando te dan es «Fuente de la lista de» resaltar el estilo, pero la barra lateral en el Calendario.la aplicación no parece ser un NSOutlineView, así que me pregunto si hay un genérico solución para esto.

¿Cómo puedo crear Yosemite estilo de vista con translúcido/borrosa de fondo?

InformationsquelleAutor Kornel | 2014-06-03

3 Comentarios

  1. 19

    Con la introducción de la versión de Yosemite de la OSX sistema operativo, Apple introdujo un nuevo modo llamado vitalidad, que es una difusión de la luz de desenfoque, el Cacao de ventana y de la ventana de componentes. Es como mirar a través de una puerta de la ducha, y utiliza el NSVisualEffectView. Apple explica este efecto aquí.

    Yo uso esta categoría en NSView.
    Simplemente llame a la vista que desea hacer vibrante.
    También es compatible con pre-Yosemite. (Si usted tiene un pre-Yosemite, no ver el efecto)

    @implementation NSView (HS)
    
    -(instancetype)insertVibrancyViewBlendingMode:(NSVisualEffectBlendingMode)mode
    {
        Class vibrantClass=NSClassFromString(@"NSVisualEffectView");
        if (vibrantClass)
        {
            NSVisualEffectView *vibrant=[[vibrantClass alloc] initWithFrame:self.bounds];
            [vibrant setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
            //uncomment for dark mode instead of light mode
            //[vibrant setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
            [vibrant setBlendingMode:mode];
            [self addSubview:vibrant positioned:NSWindowBelow relativeTo:nil];
    
            return vibrant;
        }
    
        return nil;
    }
    
    @end

    Instrucciones detalladas de @Volomike seguir…

    Cómo Utilizar

    1. Agregar AppKit.marco a la Configuración del Proyecto > Fases de construcción > Vínculo Binario con las Bibliotecas de modo que pueda reconocer NSVisualEffectView.

    2. Hacer un salida delegado de su de la ventana principal de la vista predeterminada, no la propia ventana, a su AppDelegate.m o AppDelegate.mm de archivo. (Si eres nuevo en el que, leer este tutorial.) Para los propósitos aquí, vamos a suponer que usted denomina esto como mainview, que luego es direccionable en el código como _mainview.

    3. Incluir la categoría en su proyecto. Si eres nuevo en esto, añade la categoría antes de cualquier @implementation línea en su AppDelegate.m o AppDelegate.mm de archivo.

    4. En su AppDelegate.m o AppDelegate.mm de archivo, en su @implementation AppDelegate, dentro de su applicationDidFinishLaunching método de la clase añadir esta línea de código:

    [_mainview insertVibrancyViewBlendingMode:NSVisualEffectBlendingModeBehindWindow];
    1. Ahora lo que necesita para aprender a añadir algo de código para dar a los otros elementos de la ventana, así como la propia ventana, de la translucencia. Que la translucencia permitirá a este efecto para mostrar a través de su ventana de los componentes como usted requiere. Este es se explica aquí.

    El efecto neto es que ahora toda la ventana debajo de la barra de título, o sólo las partes que desee (como una barra lateral), se mostrará esta vitalidad efecto.

    • Lo siento, pero ¿cómo puede lograrse esto en un pre yosemite construir? Ni siquiera puedo llegar a compilarlo.
    • La colocación de los FX vista debajo de la vista de contenido que lleva a la extraña representación de la fuente de artefactos (el suavizado se hace contra el mal de fondo). He encontrado que es mejor para incrustar el contenido de la vista dentro de la FX vista.
    • cualquier posibilidad de una captura de pantalla? Estoy interesado en ver la diferencia con la representación de la fuente. (No estoy muy claro cuál es el problema)
    • Ya he cenizas de mi proyecto de ejemplo, pero hay algunas capturas de pantalla de un problema relacionado en este hilo en Foros de Desarrolladores Apple.
    • puede usted explicar cómo utilizar esto en un pre Yosemite construir? Estoy corriendo XCode7 y tengo configurado el Destino de la Implementación a 10.8.
    • No estoy seguro de lo que hay que explicar! Debería simplemente no hacer nada cuando se ejecuta en un pre-Yosemite máquina.
    • Oh ¡lo tengo! Así, el código significa que puedo compilar con XCode7 y establece la Implementación de Destino a 10.8, y si tienen 10.10, el código de trabajo, pero si es menos de 10.10, que todavía va a compilar, pero no muestran el efecto.
    • He mejorado su respuesta con algo de edición para explicar un poco más cómo activarlo en el proyecto.
    • gracias por la edición. He ajustado un poco para separar la respuesta y su tutorial. Yo normalmente no explicar conceptos como el de una categoría, o cómo obtener una referencia de su punto de vista (IB puntos de venta son de una sola manera), pero si que es útil para la gente, puede permanecer en el fondo.
    • Cómo hacer para obtener la vitalidad en NSToolbar? Pensé que es una subclase de NSView pero la insertVibrancyViewBlendingMode método no funciona en NSToolbar.
    • Es un ejemplo de swift?

  2. 45

    w00t! He encontrado ejemplo de código que los usos que aún no se ha documentado tipo de vista:

    1. Conjunto XIB del destino de implementación para 10.10
    2. Incrustar su vista en NSVisualEffectView
    3. En la Interfaz del Generador de configuración para el conjunto de vistas de la apariencia a la «Vibrante de Luz/Oscuridad». Hay otras opciones, como la » mezcla «Detrás de la Ventana» o «Dentro de la Ventana» (esto último se requiere de capas).

    También hay NSView método allowsVibrancy que puede reemplazar a volver YES, pero por razones que todavía no entienden que esto no habilitar la vibración en mi caso.

    • allowsVibrancy se utiliza para cambiar la forma de una opinión se basa, sobre todo cuando en una jerarquía que utiliza la vitalidad; no la dinámica de fondo de sí mismo.
    • Para otros programadores buscando un < 10.10 solución (como 10.8+), no he encontrado ninguna que se hace la difusión/vitalidad después de 6 horas de caza y tratando de. Sólo puedo ver-a través de la translucidez, y fue capaz de lograr parcialmente en una ventana, en lugar de la ventana. Puedo, sin embargo, agregar un semi-transparente de color, pero desenfoque gaussiano parece no tener efecto en la prestación de detrás de la ventana de estilo de la difusión/vitalidad, todo lo que aparece legible detrás de la ventana, justo regulador de la semi-transparente de color.
    • La respuesta de @ConfusedVorlon hace lo mismo que este, excepto en el código, y permite que un agraciado de la reserva para que la gente que necesita para hacer que su construcción se ejecutan en pre-OSX 10.10 puede tener una base de código (sin un tenedor) que se habilita la función en Yosemite y mayor, pero deshabilitar la característica anterior de Yosemite.
    • Tuve la «Reducir la Transparencia» desactivado en las Preferencias del Sistema/Accesibilidad. Nada funcionó hasta que me di cuenta después de horas de ensayo y error
  3. 2

    Simplemente utilizar un NSVisualEffectView. Usted puede ajustar aún más con sus campos como:

    class MyFancyView: NSVisualEffectView {
        func myConfigureFunc() {
    
            //Use blendingMode to specify what exactly is blurred
    
            blendingMode = .behindWindow //[DEFAULT] ignores in-window content and only blurs content behind the window
            blendingMode = .withinWindow //ignores content behind the window and only blurs in-window content behind this view
    
    
            //Use material to specify how the blur draws (light/dark/etc.)
    
            material = .light           //The Vibrant Light look we see in countless Apple apps' sidebars, Sierra notification center, etc.
            material = .dark            //The Vibrant Dark look we all know and love from HUDs, Launchpad, Yosemite & El Capitan notification center, etc.
    
            material = .appearanceBased //[DEFAULT] Automatically uses .light or .dark, depending on the view's appearance field
    
            material = .titlebar        //The material the system uses in titlebars. Designed to be used with blendingMode = .withinWindow
            material = .selection       //A special material for selection. The material will vary depending on the effectiveAppearance, active state, and emphasized state.
    
            if #available(OSX 10.11, *) {
    
                //Materials introduced in 10.11 (El Capitan)
    
                material = .mediumLight //Not quite as light as .light
                material = .ultraDark   //Much darker than .dark
    
                material = .menu        //The material the system uses for menus
                material = .popover     //The material the system uses for popovers
                material = .sidebar     //The material the system uses for sidebars
            }
    
    
            //Use state to specify when the visual effect appears
    
            state = .active                   //Always show the visual effect
            state = .inactive                 //Never show the visual effect (behaves like a normal view)
            state = .followsWindowActiveState //[DEFAULT] Active when window is active, not when window is not
        }
    }

    Aprender más viendo el video oficial de Apple: La WWDC 2014 de la Sesión 220

Dejar respuesta

Please enter your comment!
Please enter your name here