У меня есть простое UIButton
с title
:
let signUpButton: CustomButton = {
let v = CustomButton(type: .system)
v.translatesAutoresizingMaskIntoConstraints = false
v.setTitle("Registrieren", for: .normal)
v.titleLabel?.font = UIFont(name: "AvenirNext-DemiBold", size: 15)
v.titleLabel?.textColor = .white
v.setTitleColor(.white, for: .normal)
v.backgroundColor = UIColor.darkGray
v.layer.cornerRadius = 3
v.addTarget(self, action: #selector(signUpButtonTapped(_:)), for: .touchUpInside)
return v
}()
Теперь моя цель состоит в том, чтобы при нажатии кнопки title
исчезал, button
больше не должен был быть кликабельно, и loading-animation
(Lott ie) должны отображаться. После щелчка есть две опции:
- Все в порядке, данные извлекаются, и я
present
другой ViewController
- произошла какая-то ошибка,
loading-animation
исчезает, title
отображается снова
Это моя buttonTapped
-функция (пока не полная функция для простоты):
@objc func signUpButtonTapped(_ sender: Any) {
let logoAnimation = AnimationView(name: "LoadingAnimation")
logoAnimation.contentMode = .scaleAspectFit
logoAnimation.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(logoAnimation)
logoAnimation.centerXAnchor.constraint(equalTo: signUpButton.centerXAnchor).isActive = true
logoAnimation.centerYAnchor.constraint(equalTo: signUpButton.centerYAnchor).isActive = true
logoAnimation.heightAnchor.constraint(equalToConstant: 50).isActive = true
logoAnimation.widthAnchor.constraint(equalToConstant: 50).isActive = true
logoAnimation.loopMode = .loop
logoAnimation.play()
if error!= nil {
logoAnimation.stop()
logoAnimation.removeFromSuperView()
} else {
/* present new VC */
}
Теперь актуальный вопрос, как Я заставляю title
появляться / исчезать, и что я могу сделать, чтобы button
не нажимал во время «загрузки»?
Я думал о создании UIView
с точно таким же размером / цветом и поместите его поверх button
, но это кажется не очень чистым и умным.
Есть ли быстрый и простой способ сделать это? Благодарен за любую помощь :) Если вам нужно больше деталей, просто дайте мне знать.