UIButton.Configuration вызывает затухание анимации при изменении цвета изображения кнопки.IOS

Программируем под IOS
Ответить
Anonymous
 UIButton.Configuration вызывает затухание анимации при изменении цвета изображения кнопки.

Сообщение Anonymous »

Раньше у меня был собственный класс UIButton, который я использовал для некоторых кнопок, которые ведут себя аналогично сегментированному элементу управления (т. е. их можно включать и выключать).
Я пытаюсь заменить старый код, чтобы использовать новое свойство конфигурации 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
}
}

}
И новый код кнопки, который обеспечивает затухание анимации при изменении цвета изображения (но только для isHighlighted на false и для isSelected на true):

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»