在小牛队中将CIFilter添加到CALayer?

Voj*_*jto 21 macos cocoa core-animation calayer cifilter

所以这是向图层添加滤镜的标准方法:

NSView *view = self.window.contentView;
view.wantsLayer = YES;
CATextLayer *textLayer = [CATextLayer layer];
textLayer.frame = CGRectMake(10.0, 10.0, 200.0, 100.0);
textLayer.string = @"foo";
textLayer.foregroundColor = [[NSColor redColor] CGColor];

// Add filter
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:@"inputRadius", @5.0, nil];
textLayer.filters = @[filter];

// Attach layer
[view.layer addSublayer:textLayer];
Run Code Online (Sandbox Code Playgroud)

但是,它在OS X Mavericks上崩溃了我的应用程序.习惯于10.8工作.

2013-10-23 13:09:20.767 Serus[3608:303] *** Terminating app due to uncaught exception 'CAInvalidCIFilter', reason: 'CI filters are not supported by this layer tree: {CIGaussianBlur {
    inputImage = "<null>";
    inputRadius = 10;
}}.'
Run Code Online (Sandbox Code Playgroud)

此层树不支持CI过滤器

有人见过这个吗?我可能做错了什么?

use*_*108 44

想通了,Apple决定改变它并且无缘无故地需要一个新的标志

progressIndicator.layerUsesCoreImageFilters = YES;
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,这是在`NSView`上设置的属性,而不是layer_ ..对于任何感兴趣的人......它在`AppKit.h`头中声明. (9认同)
  • 这不是没有原因,这是因为默认情况下,CALayers现在处于退出状态,以允许操作系统更好地共享资源.当然可以更好地记录下来 - 我可以建议雷达:)/cc @uliwitness (2认同)