CIFilter在为32位构建时工作,但在为64位构建时不会出现?

时间:2012-04-20 10:03:08

标签: xcode macos cocoa 32bit-64bit

我有一个XCode项目,我最初设置为32或64位。部分代码创建一个带边框的图层,然后添加一个“bloom”过滤器以在边框周围创建发光效果:

// Create a layer with just a border
CGColorRef yellowColour = CGColorCreateGenericRGB(1.0f, 1.0f, 0.0f, 1.0f);
CALayer *selectionLayer = [CALayer layer];
selectionLayer.bounds = CGRectMake(0.0f, 0.0f, size.width, size.height);
selectionLayer.borderWidth = 3.0f;
selectionLayer.borderColor = yellowColour;
selectionLayer.position = CGPointMake(100, 50);
selectionLayer.zPosition = CGFLOAT_MAX; // stay on top

// Add a bloom filter to add a glow to the border
CIFilter *filter = [CIFilter filterWithName:@"CIBloom"];
[filter setDefaults];
[filter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputRadius"];
[selectionLayer setFilters:[NSArray arrayWithObject:filter]];

当我将此项目构建为32位应用程序时,将显示该图层,黄色边框正确应用了发光效果。

如果我然后构建并运行64位,则该图层根本不会出现(我已尝试更改背景颜色以确保图层可见)

如果我注释掉添加过滤器的行,则该图层会以黄色边框重新出现(但没有应用过滤器)。

一旦我再次切换回32位,一切正常。

我在这里缺少什么?我是否需要更改框架或更改其他构建标志,以便过滤器可以在64位模式下工作?

1 个答案:

答案 0 :(得分:0)

这是非常古老的,但对于发生这种情况的人:我发现zPosition = CGFLOAT_MAX可能是罪魁祸首。 64位CGFLOAT_MAX从32位大得多,并且它以某种方式阻止该层可见。如果我想确保某些内容始终位于顶部,我只需使用自定义的大数字,例如zPosition = 1000.0f