将CIFilter应用于CALayer

所以, CIfilter现在可以在iOS 5中使用,而且我正试图将一个应用到CALayer上, 就像在Mac上一样 。 这是我的代码:

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]; 

我的白色圆圈画得很好,但没有应用filter。 有什么想法吗?

除了CIDiskBlur不可用(从iOS SDK 5.1开始)以及setFilters:似乎不可用,您可以执行以下操作:

从图层的内容创buildinputCIImage:

 CIImage *inputImage = [CIImage imageWithCGImage:(CGImageRef)(myCircle.contents)];` 

应用你的filter,并在CGImageRef中得到结果:

 CIFilter *filter = [CIFilter filterWith...];// A filter that is available in iOS or a custom one :) ... CIImage *outputImage = [filter outputImage]; CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 

最后将CGImageRef设置为图层:

 [myCircle setContents:(id)cgimg]; 

这应该工作:)