XCode iOS自定义视图颜色

XCode iOS自定义视图颜色,ios,objective-c,storyboard,uicolor,Ios,Objective C,Storyboard,Uicolor,我有一个UIViewController,在主根视图中我创建了一个自定义类,在drawRect中我创建了一个带有渐变颜色的图层,并添加到其中: [self.layer insertSublayer:bgLayer atIndex:0]; 我想使用此视图使所有视图的背景色相同 现在,我(在故事板中)添加了5个标签,并将它们组合在一个视图中(编辑器->嵌入->视图) 现在我已经创建了UIView的另一个子类,在draw rect中我有: [self setBackgroundColor:[UICo

我有一个UIViewController,在主根视图中我创建了一个自定义类,在drawRect中我创建了一个带有渐变颜色的图层,并添加到其中:

[self.layer insertSublayer:bgLayer atIndex:0];
我想使用此视图使所有视图的背景色相同

现在,我(在故事板中)添加了5个标签,并将它们组合在一个视图中(编辑器->嵌入->视图)

现在我已经创建了UIView的另一个子类,在draw rect中我有:

[self setBackgroundColor:[UIColor redColor]];
(现在我有简单的红色,以后我想有阴影,边框ecc)

因为我希望这个子视图(有5个标签)是红色的(当然,背景必须保持渐变)

当我运行应用程序时,我正确地看到了背景,但是我设置为红色的视图显示为完全黑色

如果在故事板中,我将背景更改为透明颜色(在应该为红色的视图中),则会出现5个标签,并且背景与主视图相同


我在“红色视图”的drawRect上放置了一个断点,这被调用,但什么也没发生。

我建议您查看一下。你可以用他们更容易地做你想做的事情

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [MyCustomView appearance].backgroundColor = [UIColor clearColor];
    ...
}
此外,您可能不应该在drawRect中添加子层,尤其是在视图不移动或不调整大小的情况下。我通常只是将它们添加到
-(void)awakeFromNib

编辑:

为了直接回答您的问题,我发现在自定义视图中创建渐变背景的最佳方法是覆盖
+(Class)layerClass
以提供渐变层。这将使自定义视图的基本图层成为您返回的任何图层类。通常,这可能是一个形状层,例如(对于纯色)。在我们的例子中,我们需要一个CAGradientLayer。然后,在
-(void)awakeFromNib
中,您可以设置渐变颜色,而无需处理子层

我猜你最初的问题是,你添加了一个渐变子层,而没有设置开始和结束颜色,这将在你的背景色之上绘制为黑色

例如:

@implementation MyCustomView

+ (Class)layerClass {
    return [CAGradientLayer class];
}

- (void)awakeFromNib {
    CAGradientLayer* gradientLayer = (CAGradientLayer*)self.layer;
    gradientLayer.locations = @[@0, @1];
    gradientLayer.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor greenColor].CGColor];
}

如果您需要更多详细信息,或者这不适合您,请告诉我。

我是ios编程新手,UIAppearance并不简单:)不过,我已经在其中设置了层,并创建了自定义UIView。现在,我如何使用它来告诉“将此自定义视图用于所有我的视图”。因为我希望所有的视图都有渐变背景。(我已经在awaweFromNib中移动了设置层)@marte83如果你不想使用UIAppearance代理,我已经用一个额外的建议更新了我的答案。谢谢,现在我将尝试这个解决方案。如果我有一个自定义视图,我需要在每次需要时都在Interface Builder中使用它,或者,如果我从代码构建它,我将直接使用它。苹果是否接受苹果商店应用程序的这种行为?这是苹果完全可以接受的,并且只使用公共API。非常感谢,它工作得非常好。我已把你的答复标为正确+1 :)