В UIButton ImageView.alpha изменяется после события щелчка, как сохранить предыдущую альфа-версию?

#ios #swift #uiview #uibutton

#iOS #быстрый #uiview #уибуттон

Вопрос:

У меня есть UIButton с изображением (по умолчанию ImageView для UIButton).

После создания и компоновки я устанавливаю:

 button.imageView?.alpha = 0.3
 

и все работает.

Но после нажатия кнопки изображение снова становится полностью видимым, а значение aplha изменяется.

Горячий, чтобы предотвратить это, иметь то же значение aplha после нажатия кнопки?

Ответ №1:

Я предполагаю, что UIButton может изменять свойства своих вложенных представлений по умолчанию, когда кнопка меняет свое состояние.

Я бы предложил два варианта:

  1. Используйте подкласс UIButton и переопределите isHighligted свойство:
 class MyButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            imageView?.alpha = 0.3
        }
    }
}
 
  1. Или внедрите пользовательский UIControl вместо UIButton. Вы можете добавлять и использовать свои пользовательские вложенные представления и определять, как вы хотите, чтобы они вели себя. Также вы можете использовать те же целевые действия UIControl, что и у UIButton (.touchUpInside, .touchDown и т.д.)
 class MyButton: UIControl {
    
    let titleLabel = UILabel()
    let imageView = UIImageView()
    
    ...
}
 

Ответ №2:

Попробуйте это, кнопка удаления / комментария.ImageView?.альфа = 0,3 альфа:

 let button: UIButton = {
let b = UIButton(type: .system)
    b.imageView?.image = yourImage
    // b.imageView?.alpha = 0.3 
    b.addTarget(self, action: #selector(yourAction), for: .touchUpInside)
 return b
}()
 

теперь в viewDidLoad:

 override func viewDidLoad() {
    super.viewDidLoad()
    changeAlpha()
}
var alphaControl = 0

@objc func changeAlpha() {
 if alphaControl == 0 {
 button.imageView?.alpha = 0.3
 alphaControl = 1
} else {
 button.imageView?.alpha = 1 // or all alpha that do you want
  alphaControl = 0
 }
}
 

после этого вы можете вызвать функцию changeAlpha() во всех ваших действиях с кнопками.

Вы можете добавить в нее анимацию и добавить что-то еще, если или сделать переключатель

Комментарии:

1. Это не решение, я уже пробовал, его нужно как-то изменить после вызова функции onClick.

2. @JanekWojciechowski пытается удалить / прокомментировать первую кнопку.ImageView? .атрибут alpha = 0.3 и вызовите функцию changeAlpha() в viewDidLoad, естественно, удалите вызов функции goToYourButtonAction()

3. @JanekWojciechowski Я отредактировал свой пример ответа, посмотрите и попробуйте…