2010-05-12 6 views
2

J'ai un calayer et une sous-couche dedans. Ce que je veux réaliser est un flou de la super couche (la zone sous la sous-couche), tout comme les feuilles standard le font. J'ai essayé de placer un .compositingFilter sur la sous-couche mais cela ne semble pas fonctionner.Superlayer de flou CALayer

Des idées pour résoudre ce problème?

code des sous-couches Init:

CIFilter *blur = [CIFilter filterWithName:@"CIGaussianBlur"]; 
[blur setDefaults];  
self.layer.backgroundFilters = [NSArray arrayWithObject:blur]; 

Répondre

3

ci-dessus doivent fonctionner correctement, selon le contexte, il est utilisé par exemple dans les. avec une super-couche simple contenant une image, ce qui suit pour moi:

CALayer *blurLayer = [CALayer layer]; 
CIFilter *blur = [CIFilter filterWithName:@"CIGaussianBlur"]; 
[blur setDefaults];  
blurLayer.backgroundFilters = [NSArray arrayWithObject:blur];  
[superLayer addSublayer:blurLayer]; 
+0

J'ai eu le code ci-dessus dans les vues ** - (id) init **. Quand j'ai fait la même chose après l'avoir ajouté comme sous-vue/calque, il a appliqué l'effet comme il se doit, sinon, non. –

+0

eaigner: Les vues ne s'initialisent généralement pas dans la méthode 'init'. L'initialiseur correct pour NSView est 'initWithFrame:'. La seule raison de le mettre dans init est si (1) les vues déterminent leur propre taille dans cette méthode, et appellent '[super initWithFrame:]' avec le cadre ainsi construit, et (2) vous créez les vues explicitement en utilisant 'alloc' et' init'. –

+0

Oui, je le sais. Je voulais seulement clarifier où j'ai mis le code et utilisé la version courte. Mais bien sûr, initWithFrame serait le bon. –