添加梯度的UIView的现代技术(Modern technique of adding gradie

2019-08-22 08:52发布

我知道的添加背景渐变到的UIView的几种方法。 我不知道这样做有什么,为什么最有效的和可扩展的方式? 下面是我使用的技术:

  • 创建的UIView子视图并覆盖drawRect中,在那里我画在目前情况下的梯度。

    一个。 当使用上述梯度我想装饰和插入此背景梯度作为第一子视图中,即图的边界创建它– insertSubview:atIndex:

    湾 后我从上面的背景渐变视图,我呈现在图像上下文,并使用它作为背景图像,即

      UIGraphicsBeginImageContext(gradView.bounds.size);  [gradView.layer renderInContext:UIGraphicsGetCurrentContext()];  的UIImage * gradientImg = UIGraphicsGetImageFromCurrentImageContext();  UIGraphicsEndImageContext();  的UIColor *背景= [的UIColor colorWithPatternImage:gradientImg];  self.view.backgroundColor =背景; 
  • 创建拉伸PNG并用它来装点视图背景。 技术非常相似,你装饰UIButton的方式。

       - (的UIColor *)的backgroundColor:(的CGRect)帧  {      的UIImage * BG = [UIImage的imageNamed:@ “background_23x36”];      BG = [BG resizableImageWithCapInsets:UIEdgeInsetsMake(0.0,11.0,0.0,11.0)];      UIGraphicsBeginImageContextWithOptions(frame.size,YES,[[UIScreen mainScreen]规模]);      [血糖drawInRect:帧]。      的UIImage *图像= UIGraphicsGetImageFromCurrentImageContext();      UIGraphicsEndImageContext();      返回[的UIColor colorWithPatternImage:图片];  } 
  • 创建的UIView子视图但不是覆盖drawRect中,使用CAGradientLayer。 类似http://nscookbook.com/2013/04/recipe-20-using-cagradient-layer-in-a-custom-view/

那么什么是添加渐变作为背景最有效的和可扩展的方式?

Answer 1:

作为Fogmeister上述建议,做在drawRect:你的方法UIView子类。

- (void)drawRect:(CGRect)rect
{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = UIGraphicsGetCurrentContext();

    NSArray *gradientColors = [NSArray arrayWithObjects:(id) [UIColor redColor].CGColor, [UIColor yellowColor].CGColor, nil];

    CGFloat gradientLocations[] = {0, 0.50, 1};
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) gradientColors, gradientLocations);

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
    CGGradientRelease(gradient);
    CGColorSpaceRelease(colorSpace);
}


Answer 2:

drawRect中是更有效的方式,我认为。 我想延长jverrijt的很好的答案。 如果你需要alpha分量(透明黑色渐变FE),那么你可以使用这个:

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
CGContextSaveGState(UIGraphicsGetCurrentContext());
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);
CGContextRestoreGState(UIGraphicsGetCurrentContext());

//Draw stuffs

UIGraphicsEndImageContext();


文章来源: Modern technique of adding gradient to UIView