Установите простой цветовой градиент в качестве фона UIToolbar
Я легко могу изменить цвет фона UIToolbar благодаря свойству Bart Tint в Интерфейсном Разработчике. Однако я хотел бы использовать простой двухцветный вертикальный градиент в качестве фона.
Решение должно работать с любой настраиваемой высотой панели инструментов, и моя цель - 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: я понял. Сначала мне пришлось установить "Оттенок бара" на "По умолчанию" в Интерфейсном Разработчике, чтобы оттенок был прозрачным и не скрывал программно добавленный слой градиента.
4 ответа
Вы можете использовать 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];
Swift:
var gradient:CAGradientLayer = CAGradientLayer()
gradient.frame = yourToolbar.bounds
gradient.colors = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor]
yourToolbar.layer.insertSublayer(gradient, atIndex: 0)
Это работает
var gradient:CAGradientLayer = CAGradientLayer()
gradient.frame = self.toolbar.bounds
gradient.colors = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor]
self.toolbar.layer.insertSublayer(gradient, atIndex: 0)
Это так же, как установка градиентного фона для UINavigationBar - вы можете использовать setBackgroundImage
метод UIToolbar.
Просто добавьте эти два расширения:
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)
}
}
}
Это создает UIImage из CAGradientLayer, а затем устанавливает его как фоновое изображение вашего 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
)
Надеюсь это поможет!
// Используйте этот код:
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);}
Если вы используете настраиваемую панель инструментов, возможно, вы столкнулись с проблемой размера. 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)