Estoy tratando de aplicar un de vidrio esmerilado efecto en un UIImageView.

Traté de poner en práctica lo que he encontrado en esta pregunta, pero el resultado no aceptable.
Yo quería algo como esto:

De Vidrio esmerilado (iOS 7 Blur) Efecto

También, podemos ver que iOS 7 se utiliza este tipo de efecto en un montón de lugares. ¿Cómo podemos reproducirlo?

InformationsquelleAutor Natan R. | 2012-07-22

4 Comentarios

  1. 51

    Un buen tutorial acerca de CoreImage es aquí, que muestra cómo aplicar filtros y más:

    http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5

    ACTUALIZACIÓN de 1

    Así que después de un poco de investigación, me terminé descubriendo que la Imagen principal para el iOS es todavía incompleta, cuando se compara a la versión para OS X de la biblioteca. Así que busqué en google un montón, y me encuentro con dos soluciones, una de ellas más simple, y el otro mucho más amplio y complejo de la biblioteca.

    Así, por ejemplo, en un par de líneas me puede conseguir el resultado que yo quiero (donde originalImage es el UIImage para aplicar el efecto):

    GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
    blurFilter.blurSize = 2;
    UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage];

    ACTUALIZACIÓN 2

    Después de que Apple anunció iOS 7, algunos de los desarrolladores de encontrar una solución para hacer lo mismo que hizo Apple en el defecto las apps de iOS, Apple no proporciona una API para que. La más simple y la mejor solución, en mi opinión, es este uno de los. ¿Por qué creo que es la mejor? Porque incluso si en algún punto de vista que detrás de ella se mueve, el desenfoque todavía funciona muy bien con la actualización de efecto, como esperamos que se debe trabajar. Sin embargo, ten en cuenta que depende del SDK de iOS 7 para poder trabajar, y puede ser arriesgado si Apple cambia UIToolbar.

    ACTUALIZACIÓN 3

    Apple ha mencionado, en la WWDC de 2013 (Sesión de 226 – la Aplicación de Atractiva interfaz de usuario en iOS) que proporcionaría una categoría de clase en UIImage, llamado UIImage+ImageEffects (he buscado en google, y encontrar aquí, pero está disponible en Desarrollador de Portal de búsqueda para UIImageEffects en el cuadro de búsqueda). Con esta categoría, se puede aplicar el desenfoque en una estática UIImage, utilizando varios métodos (luz, oscuridad, con un color específico, etc.). También, ayer Vi este componente y pareció bastante interesante, como se puede aplicar el efecto (basado en la mencionada categoría) en un marco.

    ACTUALIZACIÓN 4

    Finalmente, en iOS 8, Apple ha publicado las nuevas clases que puede hacer en vivo desenfoque fácilmente. Con UIVisualEffect y UIVisualEffectView, usted puede agregar rápidamente vivir desenfoque de sus aplicaciones. Aquí hay un buen tutorial de Ryan Nystrom sobre cómo usar esas clases (y en la falta de nitidez en general):

    • Usted también podría tener que mezclar el desenfoque Gaussiano con un color blanco para obtener exactamente el aspecto que va para arriba, y yo iba a hacer un filtro específico para esto en algún momento. También, iba a experimentar con la textura de vidrio esmerilado, como este shader proporciona: coding-experiments.blogspot.com/2010/06/frosted-glass.html
    • Y ¿cómo podría hacerlo? Siento que no tengo que leer docs =( no Podía compilar los documentos también.
    • Para filtros personalizados, la mejor referencia es mirar cómo los demás filtros trabajo. Por ejemplo, la sobre-vinculado con textura de vidrio se llevaría a cabo mediante el uso de una costumbre fragment shader, por lo que se necesita para crear un nuevo filtro personalizado (usando algo similar como una plantilla) y modificar el fragment shader que proporcionan a trabajar en OpenGL ES. Para el iluminado de desenfoque, usted podría ser capaz de cadena de un filtro de brillo con el desenfoque Gaussiano, o en el peor de crear un filtro de grupo con una costumbre fragment shader para el aligeramiento de paso. El núcleo de la documentación en el archivo Léame.md archivo.
    • Ok, bueno. No sin embargo, el resultado es perfecto, pero el 90% no. Gracias por las respuestas, envía un correo a contacto en sunsetlakesoftware.
    • El uso de la barra de herramientas de la capa para el efecto de desenfoque es muy arriesgado, si Apple cambia el UIToolbar la pila de vista en algún punto en el futuro de liberación, que es totalmente posible, usted será atrapado con algo muy roto y va a tener que salir corriendo de un comunicado.
  2. 21

    Solución para iOS 7 y 8, sin necesidad de utilizar CoreImage o CoreGraphics a todos:

    - (void)addBlurToView:(UIView *)view {
        UIView *blurView = nil; 
    
        if([UIBlurEffect class]) { //iOS 8
            UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
            blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
            blurView.frame = view.frame;
    
        } else { //workaround for iOS 7
            blurView = [[UIToolbar alloc] initWithFrame:view.bounds];
        }
    
        [blurView setTranslatesAutoresizingMaskIntoConstraints:NO];
    
        [view addSubview:blurView];
        [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
        [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
    }

    (suponiendo que no se dirigen a versiones anteriores de iOS 7; si usted es, usted tiene que probar la versión de iOS en el else bloque)

    Esta solución se aplica a cualquier punto de vista, no sólo imágenes.

    • muy útil la respuesta, hace que sea fácil de implementar para ios 7 y 8, solo una pregunta, suponiendo que yo estoy constantemente añadiendo y quitando esta borrosa la vista, se supone que tengo que quitar las restricciones añadido cada vez que «quitar la vista de superview» (yo use este código para agregarlo de nuevo, así que yo sé, se restringe están constantemente añadido)
    • ¿Por qué no simplemente ocultar que en lugar de quitarlo?
    • Excelente ejemplo. Las grandes obras.
    • Gran yar. Realmente muchas gracias. Funciona perfecto. Pero quiero cambiar el desenfoque de vista del color. Muestra mancha blanca.
    • Esto funciona muy bien, excepto que UIBlurEffect no funcionar en versiones anteriores de ipad, como el iPad2. Pasé horas tratando de averiguar por qué era tan sólo poner una máscara translúcida y no desenfocar – fue debido a un aparato viejo!
  3. 2

    Utilizando UIImageEffects

    Si quieres más control al aplicar el desenfoque, se puede hacer uso de Apple UIImageEffects (disponible a través de su código de ejemplo).

    Puede copiar el código para UIImageEffects de Desarrolladores de Apple, de la Biblioteca : El desenfoque y el Teñido de una Imagen

    Y aquí es cómo utilizar :

    #import "UIImageEffects.h"
    ...
    
    self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
  4. 1

    Echa un vistazo a la Imagen principal Guía de Programación. Parece que el filtro estilizar y la filtro de desenfoque pueden adaptarse a sus necesidades. Nunca he trabajado con Núcleo de Imagen antes, pero creo que puede haber algunas buenas sesiones de la WWDC que los involucran. La documentación ha una pieza básica de código de ejemplo aquí.

    • Parece que iOS no tiene todos los filtros que OS X. Usted puede comprobar que el código NSArray *properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; NSLog(@"%@", properties);
    • Sin entrar en detalles, han de ejecutar ese código en iOS 6?
    • No todavía. Comprobar mi propia respuesta – resuelto!

Dejar respuesta

Please enter your comment!
Please enter your name here