¿Alguien sabe de algún control que replicará las vistas de desenfoque de estilo iOS7?
Supongo que puede haber algún tipo de subclase UIView que replicará el comportamiento.
Estoy hablando de estos tipos de vistas que difuminan el fondo de manera extremadamente gruesa para que tengan efectos de extracción de la vista de fondo.
Respuestas:
Es posible que pueda modificar algo como RWBlurPopover de Bin Zhang para hacer esto. Ese componente usa mi GPUImage para aplicar un desenfoque gaussiano a los componentes debajo de él, pero también podría usar un CIGaussianBlur para lo mismo. Sin embargo, GPUImage podría ser un poco más rápido .
Sin embargo, ese componente depende de que usted pueda capturar la vista detrás de la que está presentando y puede tener problemas con las vistas que se animan detrás de este contenido. La necesidad de hacer un viaje a través de Core Graphics para rasterizar la vista de fondo ralentizará las cosas, por lo que probablemente no tengamos acceso directo suficiente para poder hacer esto de manera eficiente para superposiciones en vistas animadas.
Como actualización de lo anterior, recientemente modifiqué los desenfoques en GPUImage para admitir radios variables, lo que permite la replicación completa del tamaño del desenfoque en la vista del centro de control de iOS 7. A partir de eso, creé la clase GPUImageiOS7BlurFilter que encapsula el tamaño de desenfoque adecuado y la corrección de color que Apple parece estar usando aquí. Así es como el desenfoque de GPUImage (a la derecha) se compara con el desenfoque incorporado (a la izquierda):
Utilizo un aumento / disminución de resolución de 4X para reducir la cantidad de píxeles sobre los que tiene que operar el desenfoque gaussiano, por lo que un iPhone 4S puede desenfocar toda la pantalla en aproximadamente 30 ms con esta operación.
Todavía tiene el desafío de cómo atraer contenido a este desenfoque desde las vistas detrás de este de una manera eficaz.
fuente
Estoy usando
FXBlurView
que funciona muy bien en iOS5 +https://github.com/nicklockwood/FXBlurView
CocoaPods:
Lo agregué usando:
fuente
FXBlurView
encima de unUIScrollView
, también obtuve un resultado lento. Creo que esto tiene que ver con la forma en que se agrega el desenfoque. Apple, si no me equivoco, está accediendo directamente a la GPU cuando usa su propio desenfoque, lo que no podemos hacer como desarrolladores. Por lo tanto, la solución @cprcrack es en realidad la mejor solución aquí.ADVERTENCIA: alguien en los comentarios declaró que Apple rechaza las aplicaciones que utilizan esta técnica. Eso NO me pasó a mí, sino solo para su consideración.
Esto puede sorprenderte, pero puedes usar una UIToolbar , que ya incluye ese efecto estándar (solo iOS 7+). En la vista del controlador, viewDidLoad:
fuente
viewDidLoad
así. - (void) viewDidLoad {[super viewDidLoad]; self.view = [[UIToolbar alloc] initWithFrame: CGRectZero]; } En mi caso, diseño mis vistas mediante programación (estilo antiguo). Voto esta solución porque UIToolbar hereda UIView, por lo que fundamentalmente no veo ningún problema en esta solución. Probaré más a medida que avance con el desarrollo y probaré esta solución.Desde iOS8 puedes usar UIBlurEffect .
Hay buenos ejemplos en iOS8Sampler con UIBlurEffect y UIVibrancyEffect .
fuente
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
La mejor forma nueva de obtener una superposición borrosa es usar la nueva función UIVisualEffectView de iOS 8.
UIBlurEffect admite tres tipos de estilo. Oscuro, Claro y Extra claro.
fuente
Puede crear una clase con UIToolBar que sea una subclase de UIView y crear una instancia en un controlador de vista separado. Este enfoque demuestra un UIToolBar translúcido (subclasificado por UIView) que proporciona comentarios en vivo (en este caso para una AVCaptureSession).
YourUIView.h
YourUIView.m
Una vez que se haya personalizado el UIView anterior, continúe y cree una clase que sea una subclase de un ViewController. A continuación, he creado una clase que utiliza una sesión AVCapture. Debe usar AVCaptureSession para anular la configuración de la cámara integrada de Apple. Por lo tanto, puede superponer el UIToolBar translúcido de la clase YourUIView .
YourViewController.h
YourViewController.m
fuente