繁体   English   中英

在CAGradientLayer中封装drawRect渐变

[英]Encapsulate drawRect gradients in CAGradientLayer

在这里和其他地方,有数十个出色的示例说明了如何通过

-(void)drawRect:(CGRect)rect

但是,我是Quartz的新手,很可能我缺少了一些东西。 当我发现这个 ,似乎更聪明创建CAGradientLayer然后将它与类似添加到我的看法:

-(void)viewWillAppear
{
   CAGradientLayer *bgLayer = [BackgroundLayer blueGradient];
   bgLayer.frame = self.view.bounds;
   [self.view.layer insertSublayer:bgLayer atIndex:0];
}

其中blueGradient是创建渐变的单独类方法(在BackgroundLayer.m中),如下所示:

+ (CAGradientLayer*) blueGradient {

    UIColor *colorOne   = [UIColor colorWithRed:(120/255.0) green:(135/255.0) blue:(150/255.0) alpha:1.0];
   UIColor *colorTwo   = [UIColor colorWithRed:(57/255.0)  green:(79/255.0)  blue:(96/255.0)  alpha:1.0];

   NSArray *colors     = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil];
   NSNumber *stopOne   = [NSNumber numberWithFloat:0.0];
   NSNumber *stopTwo   = [NSNumber numberWithFloat:1.0];

   NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil];

   CAGradientLayer *headerLayer = [CAGradientLayer layer];
   headerLayer.colors = colors;
   headerLayer.locations = locations;

   return headerLayer;

}

所以这是我的问题。 如果要创建一个径向渐变而不是简单的线性渐变怎么办? 如何扩展blueGradient,使其可以处理二维渐变? 或者,如果我想在渐变之上添加渐变呢? drawRect函数似乎太局限了。

也许那只是错误的方法……那我缺少什么接线呢? 如何使用drawRect向我的视图添加渐变? 我想确保以模块化的方式进行操作,以便可以根据需要添加渐变叠加等。

从iOS 7开始, CAGradientLayer只能绘制线性渐变。 它不能绘制径向渐变。

您可以使用drawRect:方法,也可以将渐变绘制到图像中并在视图或图层中显示该图像。 您可以将其绘制到UIImage并在UIImageView显示,也可以将其绘制到CGImage并将其设置为CALayercontents

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM