【问题标题】:Encapsulate drawRect gradients in CAGradientLayer在 CAGradientLayer 中封装 drawRect 渐变
【发布时间】:2014-06-05 15:45:28
【问题描述】:

这里和其他地方有几十个优秀的examples 介绍如何使用渐变

-(void)drawRect:(CGRect)rect

但是,我是 Quartz 的新手,我可能遗漏了一些东西。当我找到this 时,创建一个 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 objective-c gradient


    【解决方案1】:

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

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

    【讨论】:

    • 你能举个例子吗?显然不是这个,而是像 UIImage *bgLayer = [BackgroundLayer blueGradient] 这样的行会非常有帮助。
    • 好吧,看来我只能靠我自己来解决这个问题了...无论如何,您确实回答了部分问题...所以要点是您的。
    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多