【问题标题】:Adding CIFilter to CALayer under Mavericks?Mavericks下给CALayer添加CIFilter?
【发布时间】:2013-11-01 15:12:45
【问题描述】:

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

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

但是,它在 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;
}}.'

此层树不支持 CI 过滤器

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

【问题讨论】:

    标签: macos cocoa core-animation calayer cifilter


    【解决方案1】:

    想通了,Apple 决定改变这一点并无缘无故地要求一个新标志

    progressIndicator.layerUsesCoreImageFilters = YES;
    

    【讨论】:

    • 谢谢!我对 setCompositingFilter: 也有同样的问题,这解决了它。
    • 这不是没有原因的,这是因为默认情况下,CALayers 现在被渲染到进程之外,以允许操作系统更好地共享资源。当然可以更好地记录 - 我可以建议一个雷达 :) /cc @uliwitness
    • 来自此方法的文档...如果您使用 setBackgroundFilters:、setCompositingFilter: 或 setContentFilters: 方法将 Core Image 过滤器分配给您的视图,则无需显式调用此方法。这些方法会自动让 AppKit 知道它需要在进程中渲染层层次结构。
    • 应该注意,这是在NSView 上设置的属性,不是层.. 对于任何感兴趣的人......它在@987654323 中声明@标头。
    • 也被这个蜇了!
    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 2013-12-13
    • 1970-01-01
    • 2011-08-16
    • 2021-12-17
    • 2021-08-16
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多