[英]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
并将其设置为CALayer
的contents
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.