1

我有一个最初设置为构建为 32 位或 64 位的 XCode 项目。部分代码创建一个带边框的图层,然后添加一个“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 位模式下工作?

4

1 回答 1

0

这已经很老了,但是对于发生在这件事上的人来说:我发现这zPosition = CGFLOAT_MAX可能是罪魁祸首。64 位CGFLOAT_MAX比 32 位大得多,而且它以某种方式完全阻止了图层可见。如果我想确保某些东西总是在最前面,我只需使用一个自定义的大数,比如zPosition = 1000.0f.

于 2015-03-06T11:54:18.653 回答