设置一个简单的颜色渐变作为UIToolbar的背景

时间:2015-01-18 00:57:03

标签: ios uitoolbar uicolor tintcolor bartintcolor

由于Interface Builder中的Bart Tint属性,我可以轻松更改UIToolbar背景颜色。但是,我想使用简单的双色垂直渐变作为背景。

该解决方案应该适用于任何自定义工具栏高度,我的目标是iOS 7+。如果必须以编程方式完成,欢迎使用Objective-C和Swift。

修改:根据我在viewDidLoad中执行此操作的答案,但不起作用:

var gradient = CAGradientLayer()
gradient.frame = toolbar.bounds
gradient.colors = [UIColor.redColor(), UIColor.greenColor()]
toolbar.layer.insertSublayer(gradient, atIndex: 0)

编辑2 :根据答案,我替换了以下行,但它仍然没有效果:

gradient.colors = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor]

编辑3 :我明白了。我必须首先在Interface Builder中将“Bar Tint”设置为“Default”,这样色调是透明的,不会隐藏以编程方式添加的渐变图层。

5 个答案:

答案 0 :(得分:2)

您可以使用CAGradientLayer来实现此目标。

目标C:

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame            = yourToolbar.bounds;
gradient.colors           = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor greenColor] CGColor], nil];
[yourToolbar.layer insertSublayer:gradient atIndex:0];

夫特:

var gradient:CAGradientLayer = CAGradientLayer()
gradient.frame               = yourToolbar.bounds
gradient.colors              = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor]
yourToolbar.layer.insertSublayer(gradient, atIndex: 0)

答案 1 :(得分:2)

这有效

    var gradient:CAGradientLayer = CAGradientLayer()
    gradient.frame = self.toolbar.bounds
    gradient.colors = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor]
    self.toolbar.layer.insertSublayer(gradient, atIndex: 0)

答案 2 :(得分:1)

这与为UINavigationBar设置渐变背景相同-您可以使用UIToolbar的setBackgroundImage方法。

只需添加以下两个扩展名:

extension UIImage {
    static func imageFromLayer (layer: CALayer) -> UIImage? {
        UIGraphicsBeginImageContext(layer.frame.size)
        guard let currentContext = UIGraphicsGetCurrentContext() else {return nil}
        layer.render(in: currentContext)
        let outputImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return outputImage
    }
}

extension UIToolbar {
    func setGradientBackground(barFrame: CGRect, aColor: UIColor, bColor: UIColor, aX: CGFloat, bX: CGFloat, aY: CGFloat, bY: CGFloat) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = frame
        gradientLayer.colors = [aColor.cgColor, bColor.cgColor]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.startPoint = CGPoint(x: aX, y: aY)
        gradientLayer.endPoint = CGPoint(x: bX, y: bY)
        if let image = UIImage.imageFromLayer(layer: gradientLayer) {
            self.setBackgroundImage(image, forToolbarPosition: .bottom, barMetrics: .default)
        }
    }
}

这将从CAGradientLayer创建UIImage,然后将其设置为UIToolbar的背景图像。然后将其应用于您的UIToolbar。例如,从蓝色到白色的水平渐变:

myToolbar.setGradientBackground(
                barFrame: navigationBar.frame,
                aColor: UIColor.blue,
                bColor: UIColor.white,
                aX: 0.0,
                bX: 1.0,
                aY: 0.5,
                bY: 0.5
            )

希望这会有所帮助!

答案 3 :(得分:0)

//使用此代码:

I = 2;

        leftColor = [UIColor colorWithRed:0.03 green:0.20 blue:0.95 alpha:1.0];
rightColor = [UIColor colorWithRed:0.98 green:0.00 blue:0.89 alpha:1.0];
gradient.frame = self.font_imageview.bounds;
gradient.colors = [NSArray arrayWithObjects:
                   (id)[rightColor CGColor],
                   (id)[UIColor clearColor].CGColor,
                   (id)[leftColor CGColor],nil];

[font_imageview.layer insertSublayer:gradient atIndex:0];

gradient.startPoint = CGPointMake(0.0, 0.5);
gradient.endPoint = CGPointMake(1.0, 0.5);}

答案 4 :(得分:0)

如果使用自定义工具栏,则可能会遇到尺寸问题。 view_toolbar 可以是任何视图,在这里我找到了另一个完美的解决方案:

let gradientLayer = CAGradientLayer()
var bounds =  self.view_toolbar.bounds
bounds.size.height += UIApplication.shared.statusBarFrame.size.height
gradientLayer.frame = bounds
gradientLayer.colors = [colorPrimary, colorPrimaryDark]
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 0)

self.view_toolbar.layer.insertSublayer(gradientLayer, at: 0)