由于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”,这样色调是透明的,不会隐藏以编程方式添加的渐变图层。
答案 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)