0

我正在将渐变设置为视图的背景:

CAGradientLayer *grad = [CAGradientLayer layer];
grad.frame = self.contentView.frame;
grad.colors = @[(id)[[UIColor colorWithRed:1.0f green:0.5f blue:0.5f alpha:0.0f] CGColor],
                (id)[[UIColor colorWithWhite:1.0f alpha:0.5f] CGColor],
                (id)[[UIColor colorWithWhite:1.0f alpha:0.8f] CGColor],
                (id)[[UIColor colorWithWhite:0.0f alpha:1.0f] CGColor]];
grad.locations = @[@0.00f, @0.5f, @0.7f, @1.00f];        
self.layer.mask = grad;

问题是,我视图顶部的每个元素(UIButton,UILabel ...)都具有与父级相同的梯度。我怎样才能只为视图而不是为这个视图上的项目设置渐变?

4

2 回答 2

1

您可以将渐变设置为视图的子层,而不是设置蒙版,如下所示:

 [self.view setBackgroundColor:[UIColor clearColor]]; 
 [self.view.layer insertSublayer:grad atIndex:0];
于 2014-06-08T10:45:48.980 回答
0

这就是口罩应该做的事情。:-)

您可以使用不是超级视图(但可能是同级)的专用背景视图,而不是在它上面绘制的其他视图。当您不将它用作子视图的超级视图而是作为兄弟姐妹的兄弟(都共享相同的超级视图)时,那么顺序很重要。确保首先绘制背景视图。当它位于视图层次结构树中的“子视图”之上但在同一级别内时,即在 IB 中。

于 2014-06-08T10:54:37.933 回答