gpt4 book ai didi

iphone - CALayer 不在设备上渲染背景颜色,在模拟器中工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:45 25 4
gpt4 key购买 nike

我用图层创建了一个自定义按钮。我在 init 中创建了一堆图层。在我去修改*它们之前,一切都按预期工作。问题仅在实际设备上出现,在模拟器上代码按预期工作。

我尝试通过将 needsDisplay 和 needsLayout 设置为 YES 来强制渲染图层。

-(void) setBackgroundColor:(UIColor *)backgroundColor
{
//return; // if I return here, the button gets initialized with it's default royal blue color. This works correctly on the simulator and device

[primaryBackground setColors: [NSArray arrayWithObject:(id)backgroundColor.CGColor]];

//return; //if I return here, primaryBackground will display a clear background on the device, but will display CGColor on the simulator.

CALayer* ll = [CALayer layer];
ll.frame=self.frame;
ll.cornerRadius=primaryBackground.cornerRadius;
[ll setBackgroundColor:backgroundColor.CGColor];
[primaryBackground addSublayer:ll];

//if I return here, primaryBackground will display the "expected" results on both platforms. IE: it dispalys the new layer, but not it's background color.
}

模拟器

simulator screenshot

设备

device screenshot

测试

我在 iOS 5.1 和 4.2 上进行了测试,结果相同。似乎在模拟器版本 4.1、4.2 和 5.1 上工作相同

最佳答案

我发现您的代码至少有 2 个问题:

  1. 每次更改颜色时,您都会添加一个新层,而不会删除旧层。首先,删除之前创建的子图层(或者只是更改其颜色而不创建和添加新子图层)。请记住,默认 opaque CALayer的属性(property)设置为 NO ,这意味着它正在与所有其他子层混合。

    为什么还要添加另一个子层?在您的代码中,您覆盖了 primaryBackground完全地。不能setBackgroundColor:函数看起来像这样:

    - (void)setBackgroundColor:(UIColor *)backgroundColor { 
    [primaryBackground setBackgroundColor:backgroundColor.CGColor];
    }

    ?

  2. 但是如果你真的必须有一个额外的层,你应该设置llframeboundssuperlayer (不是 frame )。应该是ll.frame = self.bounds .您还应该覆盖 - (void)layoutSubivews方法并设置 frame背景层的边界再次到根层的边界。

请记住,在 iPhone 模拟器 上,事物由不同的子系统呈现,并且比在真实设备上快得多。并且一些帧计算可能会重叠等。

关于iphone - CALayer 不在设备上渲染背景颜色,在模拟器中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12065460/

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