2011-03-09 15 views

Respuesta

18

La solución más fácil significativamente más que el -bitmapImageRepEtc: uno, y más aplicable a Mac OS que la rasterización escala método es para configurar su vista de superposición para usar una capa de respaldo de Core Animation, luego dele a esa capa un filtro de desenfoque de la imagen principal. Es una técnica utilizada en todo el Mac OS, desde los menús del Dock hasta la barra de menú. Interface Builder hace que sea trivialmente fácil de configurar, pero se puede hacer en el código, así, como este:

CALayer *backgroundLayer = [CALayer layer]; 
[backgroundView setLayer:backgroundLayer]; 
[backgroundView setWantsLayer:YES]; 

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 
[blurFilter setDefaults]; 

[backgroundView layer].backgroundFilters = [NSArray arrayWithObject:blurFilter]; 
+3

Parece que esto solo funciona cuando la vista cubre por completo las otras vistas que se encuentran debajo. Cuando solo los cubre parcialmente, todo el área debajo de la vista está borrosa. – adib

+0

Perdón por traer esto de vuelta a los muertos - ¿De qué framework (s) depende? SetLayer? – capikaw

+3

Animación principal: QuartzCore.framework –

-3

¿Ha intentado cambiar el atributo Alfa de la vista (por transparencia)? También aquí hay un enlace en difuminación vistas: Blur Effect for UIView

+1

yo preferiría llamar a este pixelada que borrosa. – Konrad77

2

La técnica básica sería la captación de la imagen de su punto de vista, el uso de algo así como el método de NSView‑bitmapImageRepForCachingDisplayInRect:, el procesamiento de la imagen para que sea borrosa (Core Image es su amigo aquí) y luego superponga su vista con un NSImageView que contiene la imagen borrosa.

Ésta es falsedad, por supuesto, pero eso es lo que se trata de talento para el espectáculo :-)

Cuestiones relacionadas