Я пытаюсь заменить старый код, чтобы использовать новое свойство конфигурации UIButton.Configuration. Но при этом поведение кнопки в пользовательском интерфейсе слегка изменилось.
Раньше при изменении цвета изображения кнопки оно менялось сразу, без анимации. Но теперь для некоторых переходов есть небольшая анимация, при которой новый цвет исчезает.
Похоже, что когда он переходит от isHighlighted к true или от isSelected к false, анимации нет, но для isHighlighted, переходящего в false или isSelected, переходящего в true, анимируется новый цвет изображения постепенное появление.
Вот старый код кнопки, без плавного исчезновения цвета изображения в анимации:
Код: Выделить всё
class MyOldButton: UIButton {
override init(frame: CGRect) { fatalError() }
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupUI()
}
private var customColor: UIColor {
switch (isSelected, isHighlighted) {
case (true, false):
return .red
case (true, true):
return .green
case (false, false):
return .blue
case (false, true):
return .yellow
}
}
private func setupUI() {
clipsToBounds = true
adjustsImageWhenHighlighted = false
adjustsImageWhenDisabled = false
tintAdjustmentMode = .normal
tintColor = customColor
}
override var isSelected: Bool {
didSet {
tintColor = customColor
}
}
override var isHighlighted: Bool {
didSet {
tintColor = customColor
}
}
}
Код: Выделить всё
class MyNewButton: UIButton {
override init(frame: CGRect) { fatalError() }
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupUI()
}
private var customColor: UIColor {
switch (isSelected, isHighlighted) {
case (true, false):
return .red
case (true, true):
return .green
case (false, false):
return .blue
case (false, true):
return .yellow
}
}
private func setupUI() {
clipsToBounds = true
tintAdjustmentMode = .normal
backgroundColor = .clear
changesSelectionAsPrimaryAction = true
var config = UIButton.Configuration.filled()
config.imagePlacement = .top
configuration = config
configurationUpdateHandler = { [weak self] button in
guard let self else { return }
var config = button.configuration
config?.baseForegroundColor = self.customColor
button.configuration = config
}
}
}
Кто-нибудь знает?
Подробнее здесь: https://stackoverflow.com/questions/753 ... tton-image
Мобильная версия