L'application d'un CIFilter à un CALayer
CI Filtres sont maintenant disponibles dans iOS 5, et je vais essayer d'appliquer un à un CALayer, la façon dont vous le ferais sur Mac. Voici mon code:
CALayer *myCircle = [CALayer layer];
myCircle.bounds = CGRectMake(0,0,30,30);
myCircle.position = CGPointMake(100,100);
myCircle.cornerRadius = 15;
myCircle.borderColor = [UIColor whiteColor].CGColor;
myCircle.borderWidth = 2;
myCircle.backgroundColor = [UIColor whiteColor].CGColor;
CIFilter *blurFilter = [CIFilter filterWithName:@"CIDiscBlur"];
[blurFilter setDefaults];
[blurFilter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputRadius"];
[myCircle setFilters:[NSArray arrayWithObjects:blurFilter, nil]];
[self.view.layer addSublayer:myCircle];
Mon cercle blanc attire l'amende, mais le filtre n'est pas appliqué.
À partir de la CALayer de la documentation: "iOS Remarque: lors de la CALayer classe dans iOS expose la propriété filters, Core Image n'est pas disponible. Actuellement, les filtres disponibles pour cette propriété ne sont pas définis." - donc, je ne suis pas sûr si c'est vraiment de travail
Aussi, aucun des filtres de flou sur le Mac sont actuellement pris en charge dans l'Image principale de la mise en œuvre sur iOS: stackoverflow.com/questions/8528726/...
Aussi, aucun des filtres de flou sur le Mac sont actuellement pris en charge dans l'Image principale de la mise en œuvre sur iOS: stackoverflow.com/questions/8528726/...
OriginalL'auteur Eric | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
Hormis le fait que
CIDiskBlur
n'est pas disponible (SDK iOS 5.1) et quesetFilters:
semble pas disponibles vous pouvez faire ce qui suit:Créer l'entrée CIImage à partir du contenu de votre calque:
Appliquer des filtres et obtenir le résultat dans un CGImageRef:
Finalement mis la CGImageRef de la couche:
Cela devrait fonctionner 🙂
Cela dépend, je pense qu'il ya pas beaucoup que nous pouvons faire à l'intérieur du filtre, ce que nous pouvons faire est d'essayer de dessiner directement à la couche à l'aide d'OpenGL au lieu de créer un CGImageRef et à l'aide de
setContents:
.Aussi, nous pourrions remplir un rapport de bogue-rapport et demande
setFilters:
pour être en mesure d'utiliser, et de s'asseoir et d'attendre :p.Vous aurez probablement besoin de faire un CFBridgingRelease(cgimg) pour ARC sur cette dernière ligne. Également besoin d' [filtre setValue:inputImage forKey:@"inputImage"];
Oh... cette réponse nécessite une mise à jour. Je pense que c'est maintenant possible d'appliquer le filtre directement.... Je mettrai à jour cette réponse plus tard 🙂 si pas de ping-moi encore.
OriginalL'auteur nacho4d