objective-c – 核心动画图层不在Snow Leopard下显示
发布时间:2020-12-16 07:32:21 所属栏目:百科 来源:网络整理
导读:我最近将我的OS X App中的一个视图转换为图层托管,并且所有这些视图在Mountain Lion下运行良好,但是我的一个测试人员抱怨这些图层没有在Snow Leopard下显示.我编写了一个小测试应用程序来执行进一步的测试(源代码 here),这个测试应用程序也不能在10.6下工作.
我最近将我的OS X App中的一个视图转换为图层托管,并且所有这些视图在Mountain Lion下运行良好,但是我的一个测试人员抱怨这些图层没有在Snow Leopard下显示.我编写了一个小测试应用程序来执行进一步的测试(源代码
here),这个测试应用程序也不能在10.6下工作.
以下是设置图层的主要代码: - (id)initWithFrame:(NSRect)frameRect { NSLog(@"initWithFrame"); self = [super initWithFrame:frameRect]; if (self != nil) { srand((unsigned)time(NULL)); _rootLayer = [[CALayer alloc] init]; _rootLayer.delegate = self; _rootLayer.anchorPoint = CGPointMake(0.0,0.0); _rootLayer.frame = NSRectToCGRect([self bounds]); _rootLayer.needsDisplayOnBoundsChange = NO; _rootLayer.masksToBounds = YES; self.layer = _rootLayer; self.wantsLayer = YES; _backgroundLayer = [[CALayer alloc] init]; _backgroundLayer.delegate = self; _backgroundLayer.anchorPoint = CGPointMake(0.5,0.5); _backgroundLayer.frame = CGRectInset(NSRectToCGRect([self bounds]),BACKGROUND_INSET,BACKGROUND_INSET); _backgroundLayer.cornerRadius = 5.0; _backgroundLayer.needsDisplayOnBoundsChange = NO; _backgroundLayer.masksToBounds = YES; [_rootLayer addSublayer:_backgroundLayer]; _mouseLayer = [self _createOtherLayer]; _mouseLayer.opacity = 0.5; for (unsigned i = 0; i < NUM_OTHER_LAYERS; i++) _otherLayers[i] = [self _createOtherLayer]; [_backgroundLayer addSublayer:_mouseLayer]; [_rootLayer setNeedsDisplay]; [_backgroundLayer setNeedsDisplay]; [self _positionOtherLayersInRect:frameRect]; _trackingArea = nil; [self updateTrackingAreas]; } return self; } 以下是创建其他图层的方法: - (CALayer *)_createOtherLayer { CALayer *layer = [[CALayer alloc] init]; layer.delegate = self; layer.anchorPoint = CGPointMake(0.5,0.5); layer.bounds = CGRectMake(0.0,0.0,64.0,64.0); layer.position = CGPointMake(0.0,0.0); layer.needsDisplayOnBoundsChange = NO; layer.masksToBounds = YES; layer.shadowColor = CGColorGetConstantColor(kCGColorBlack); layer.shadowOffset = CGSizeMake(2.0,-2.0); layer.shadowRadius = 2.0; layer.shadowOpacity = 1.0; [_backgroundLayer addSublayer:layer]; [layer setNeedsDisplay]; return layer; } 任何人都可以建议为什么这些层在10.6下不起作用? 解决方法
您是否尝试将initWithFrame中的代码移动到awakeFromNib中?这似乎是一个常见的错误导致层被搞砸了.在
this question中,问题是这些图层是在initWithFrame中设置的,但由于nib默认标记为不需要图层,因此它们会立即被删除.将代码移动到awakeFromNib,而不是使用传递的帧使用self.frame并查看是否可以解决问题.至少它应该不会更糟(在将代码移动到awakeFromNib之后在我的Mac上运行Lion并且它仍能正常工作,所以它没有破坏任何东西),它可能只是你正在寻找的解决方案对于.
希望这有效,或者您很快就会找到另一种解决方案.祝你有美好的一天. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |