gpt4 book ai didi

objective-c - 雪豹下不显示核心动画层

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:28 25 4
gpt4 key购买 nike

我最近将我的 OS X 应用程序中的一个 View 转换为图层托管,并且在 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 并且它仍然工作正常,所以它没有破坏任何东西),它可能只是你正在寻找的解决方案为。

希望这能奏效,或者您很快就会找到其他解决方案。祝你有美好的一天。 :)

关于objective-c - 雪豹下不显示核心动画层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com