3

所以这是我第一次尝试使用 CALayer。构建成功并且没有报告错误,所以我认为我必须做一些明显错误的事情。但是该图层根本不显示。

- (void)viewDidLoad
{

    // Get Reliant Magenta in amazingly verbose manner
    CGColorSpaceRef rgbaColorSpace      = CGColorSpaceCreateDeviceRGB();
    CGFloat reliantMagentaValues[4]     = {(208/255),(27/255),(124/255),0.3f};
    CGColorRef reliantMagenta           = CGColorCreate(rgbaColorSpace, reliantMagentaValues);

    CALayer *reliantCanvasLayer         = [CALayer layer];

    reliantCanvasLayer.backgroundColor  = reliantMagenta;
    reliantCanvasLayer.frame            = CGRectMake(0, 0, 640, 960);

    [super viewDidLoad];

    [[[self view] layer] addSublayer:reliantCanvasLayer];

    CGColorRelease(reliantMagenta);

}

我得到的不是一整页洋红色,而是灰色的空白视图。我怎么把这么简单的事情搞砸了?


更新

- (void)viewDidLoad
{

    [super viewDidLoad];

    // Get Reliant Magenta in amazingly verbose manner
    CGColorSpaceRef rgbaColorSpace      = CGColorSpaceCreateDeviceRGB();
    CGFloat reliantMagentaValues[4]     = {(208/255),(27/255),(124/255),0.3f};
    CGColorRef reliantMagenta           = CGColorCreate(rgbaColorSpace, reliantMagentaValues);

    [[self view] layer].backgroundColor   = reliantMagenta;

    CGColorRelease(reliantMagenta);

}

同样的问题,但视图现在是黑色的,并且不显示故事板中添加的元素

4

2 回答 2

5

一个问题(可能是唯一的问题)是您正在使用所有零组件创建颜色。当您说208/255时,编译器使用整数执行除法并丢弃余数,因此208/255为 0。您需要用浮点除法:208.0f / 255.0f

UIColor使用 a而不是自己设置 theCGColorSpace和 the也容易得多CGColor。试试这个:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIColor *reliantMagenta = [UIColor colorWithRed:208.0f / 255.0f
        green:27.0f / 255.0f blue:124.0f / 255.0f alpha:0.3f];

    CALayer *magentaLayer = [CALayer layer];
    magentaLayer.frame = CGRectMake(0, 0, 640, 960);
    magentaLayer.backgroundColor = reliantMagenta.CGColor;

    [self.view.layer addSublayer:magentaLayer];
}
于 2012-09-30T04:31:06.560 回答
1

您正在添加一个图层作为其自身的子图层。[self layer]返回视图的现有层。如果要创建单独的图层,则必须手动进行。视图系统中可能有一些东西可以防止循环引用迭代失控。

作为参考,您应该养成[super viewDidLoad]在做任何其他事情之前先打电话的习惯。创建 a 的更简单方法CGColor是创建 aUIColor并获取其CGColor属性。

于 2012-09-30T03:06:29.683 回答