我知道的添加背景渐变到的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/
那么什么是添加渐变作为背景最有效的和可扩展的方式?
作为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);
}
drawRect中是更有效的方式,我认为。 我想延长jverrijt的很好的答案。 如果你需要alpha分量(透明黑色渐变FE),那么你可以使用这个:
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
CGContextSaveGState(UIGraphicsGetCurrentContext());
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);
CGContextRestoreGState(UIGraphicsGetCurrentContext());
//Draw stuffs
UIGraphicsEndImageContext();