Я создал пользовательский подкласс UIButton с закругленными углами, градиентным фоном и тенями. Кнопки выглядят нормально и сглаживаются сразу после запуска приложения, но если я нажимаю одну, ее края становятся пиксельными.
Я пробовал много вещей, таких как установка .allowsEdgeAntialiasing = true для слоев кнопки или удаление анимации масштабного преобразования из сеттера «Выделенный» и т. Д., И ничто не помогает вообще: (
Вот мой класс кнопки:
@IBDesignable class CircleTintedButton: UIButton {
@IBInspectable var cornerRadius : CGFloat = 1.0
@IBInspectable var shadowOffsetWidth: CGFloat = 0.0
@IBInspectable var shadowOffsetHeight: CGFloat = 2.0
@IBInspectable var shadowColor : UIColor = UIColor.gray
@IBInspectable var shadowOpacity: CGFloat = 0.3
@IBInspectable var startColor: UIColor = .blue {
didSet {
setNeedsLayout()
}
}
@IBInspectable var endColor: UIColor = .green {
didSet {
setNeedsLayout()
}
}
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = cornerRadius
layer.shadowColor = shadowColor.cgColor
layer.shadowOffset = CGSize(width: shadowOffsetWidth, height: shadowOffsetHeight)
let shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius)
layer.shadowPath = shadowPath.cgPath
layer.shadowOpacity = Float(shadowOpacity)
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [startColor.cgColor, endColor.cgColor]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.6)
gradientLayer.locations = [0, 1]
gradientLayer.frame = bounds
gradientLayer.cornerRadius = cornerRadius
gradientLayer.masksToBounds = true
layer.insertSublayer(gradientLayer, below: self.titleLabel?.layer)
}
override var isHighlighted: Bool {
get {
return super.isHighlighted
}
set {
let xScale : CGFloat = newValue ? 1.025 : 1.0
let yScale : CGFloat = newValue ? 1.1 : 1.0
UIView.animate(withDuration: 0.1) {
let transformation = CGAffineTransform(scaleX: xScale, y: yScale)
self.transform = transformation
}
super.isHighlighted = newValue
}
}
}
Некоторые скриншоты с моего тестового устройства (iPhone 7 @ 12.1.2):
После запуска приложения:
https://vinishko.party/files/ok.jpg
После того, как я нажму эту кнопку:
https://vinishko.party/files/aliased.jpg
Потратил целый день, уже пытаясь решить эту проблему, пожалуйста, помогите мне: D
Спасибо.