J'utilise Parse & ParseUI. Je souhaite que ma sous-classe PFLoginViewController ait un arrière-plan transparent. À l’avenir, je souhaite créer une vision floue sur l’arrière-plan.
Mais .... Une fois que l'animation du PFLoginViewController est terminée, l'arrière-plan devient noir ... Alors que pendant l'animation, l'arrière-plan était transparent.
func presentLogin() {
var loginViewController = LoginViewController()
var signupViewController = SignUpViewController()
loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | PFLogInFields.DismissButton
signupViewController.fields = .UsernameAndPassword | .Email | .DismissButton | .SignUpButton
loginViewController.delegate = self
loginViewController.logInView.backgroundColor = UIColor.clearColor()
loginViewController.logInView.opaque = false
signupViewController.delegate = self
loginViewController.signUpController = signupViewController
self.presentViewController(loginViewController, animated: true) { () -> Void in
//
}
}
La sous-classe utilisée par mon contrôleur principal:
class LoginViewController: PFLogInViewController {
@IBOutlet weak var _nmcLogoLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let userName = SettingsManager.userName
let password = SettingsManager.password
self.logInView.usernameField.text = userName
self.logInView.passwordField.text = password
NSBundle.mainBundle().loadNibNamed("LoginViewBranding", owner: self, options: nil)[0] as? UIView
self.logInView.logo = _nmcLogoLabel
}
}
Comment puis-je le rendre transparent?
P.s. L'application de clearColor à backgroundColor dans la sous-classe ne fait aucune différence
Fixe le.
Le problème était que presentViewController ne conserve pas la vue que je couvrais.
viewController.modalPresentationStyle = .overCurrentContext
a fait le tour.
Une partie de la solution est cachée dans la question. Vous avez besoin de trois lignes pour rendre le fond transparent, à savoir. isOpaque = false
backgroundColor = .clear
& Configurez le modalPresentationStyle
Voici la solution complète. Dans le contrôleur de vue appelant, appelez cette fonction:
func presentModal() {
let modalController = ModalViewController()
modalViewController.modalPresentationStyle = .overCurrentContext
present(modalViewController, animated: true, completion: nil)
}
Et dans ModalViewController
viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
view.isOpaque = false
view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc.
}
Au cas où quelqu'un aurait encore du mal à conserver un arrière-plan transparent, j'ai trouvé cette solution il y a quelque temps. Je ne me souviens plus où, mais cela fonctionne toujours très bien avec les dernières versions de Xcode et Swift.
ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.modalPresentationStyle = .custom
self.transitioningDelegate = self
}