Ich benutze Parse & ParseUI. Ich möchte, dass meine PFLoginViewController-Unterklasse einen transparenten Hintergrund hat. In Zukunft möchte ich einen unscharfen Blick über den Hintergrund werfen.
Aber ... Sobald das Animate-In des PFLoginViewControllers abgeschlossen ist, wird der Hintergrund schwarz ... Während der Animation war der Hintergrund 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
//
}
}
Die verwendete Unterklasse meines Logincontrollers:
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
}
}
Wie kann ich es transparent machen?
Ps. Das Anwenden der clearColor auf die backgroundColor in der Unterklasse macht keinen Unterschied
Behoben.
Das Problem war, dass presentViewController die von mir abgedeckte Ansicht nicht beibehält.
viewController.modalPresentationStyle = .overCurrentContext
hat den Trick gemacht.
Ein Teil der Lösung ist in der Frage verborgen. Sie benötigen drei Zeilen, um den Hintergrund transparent zu machen, nämlich. isOpaque = false
backgroundColor = .clear
& Setze den modalPresentationStyle
Hier ist die vollständige Lösung. Rufen Sie im aufrufenden View Controller die folgende Funktion auf:
func presentModal() {
let modalController = ModalViewController()
modalViewController.modalPresentationStyle = .overCurrentContext
present(modalViewController, animated: true, completion: nil)
}
Und in ModalViewController
's viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
view.isOpaque = false
view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc.
}
Für den Fall, dass noch jemand mit einem transparenten Hintergrund zu kämpfen hat, habe ich diese Lösung vor einiger Zeit gefunden - ich kann mich nicht erinnern, wo, aber mit dem neuesten Xcode & Swift funktioniert sie noch gut.
ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.modalPresentationStyle = .custom
self.transitioningDelegate = self
}