Кажется, это сложная проблема, для которой я не могу найти решение.
Мне нужен UIButton
с:
- закругленные углы,
- цвет фона для состояния,
- падающая тень.
Я могу добиться радиуса угла и цвета фона для подкласса состояния UIButton
и установки параметров:
// The button is set to "type: Custom" in the interface builder.
// 1. rounded corners
self.layer.cornerRadius = 10.0
// 2. Color for state
self.backgroundColor = UIColor.orange // for state .normal
self.setBackgroundColor(color: UIColor.red, forState: .highlighted)
// 3. Add the shadow
self.layer.shadowColor = UIColor.black.cgColor
self.layer.shadowOffset = CGSize(width: 0, height: 3)
self.layer.shadowOpacity = 0.3
self.layer.shadowRadius = 6.0
self.layer.masksToBounds = false
// I'm also using an extension to be able to set the background color
extension UIButton {
func setBackgroundColor(color: UIColor, forState: UIControl.State) {
UIGraphicsBeginImageContext(CGSize(width: 1, height: 1))
if let context = UIGraphicsGetCurrentContext() {
context.setFillColor(color.cgColor)
context.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.setBackgroundImage(colorImage, for: forState)
}
}
}
Проблема:
После того, как кнопка отобразилась, она выглядит нормально, имеет желаемый цвет фона, закругленные углы и тень. Но при нажатии setBackgroundImage(image, for: forState)
запускается и избавляется от радиуса, поэтому кнопка отображается в виде квадрата с нужным цветом и тенью.
Есть ли способ сохранить радиус при нажатии кнопки (.highlighted
)?
Я попробовал решения из этот пост (например) но никто не считает setBackgroundImage(image, for: forState)
. не могу найти ничего работающего...