以编程方式为视图创建背景渐变?怎么样?

时间:2011-02-12 17:53:12

标签: iphone cocoa-touch ios4 uinavigationbar quartz-graphics

我有一个小视图,上面有几个按钮。当你将UINavigation栏设置为Black Opaque时,我想让这个小视图背景与渐变相同的黑色渐变?

这可能是以编程方式进行还是我需要在Photoshop上尽我所能来复制它? :)

1 个答案:

答案 0 :(得分:3)

UIView和绘制背景的简单覆盖drawRect消息:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    GContextDrawLinearGradient(context, self.gradientLayer, CGPointMake(0.0, 0.0),
                            CGPointMake(0.0, self.frame.size.height), kCGGradientDrawsBeforeStartLocation);
}

要创建和缓存渐变,请使用此代码段(您应该使用自己的颜色组件)。

- (CGGradientRef)gradientLayer
{
    if (_gradientLayer == nil)
    {
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
        CGFloat locations[] = { 0.0, 1.0 };
        CGFloat colors[] = { 0.0 / 255.0, 0.0 / 255.0, 48.0 / 255.0, 1.00, 26.0 / 255.0, 48.0 / 255.0, 89.0 / 255.0, 1.00 };

        _gradientLayer = CGGradientCreateWithColorComponents(colorSpace, colors, locations, sizeof(colors) / (sizeof(colors[0]) * 4));
        CGColorSpaceRelease(colorSpace);
    }
    return _gradientLayer;
}

当然不要忘记将你的渐变释放到dealloc。