2015-10-13 18 views
68

So che questo argomento è molto popolare, ma sono un piccolo problema iniciate in un linguaggio di programmazione, il fatto è che non riesco ancora a capire dove ho messo il codice. Beh, ti dirò tutto il caso:Swift Modal View Controller con sfondo trasparente

enter image description here

Sto cercando di fare uno Swift modale in un po 'diverso dal normale: Facendo clic su un pulsante, il ViewController viene visualizzato (segue tipo modale) sullo schermo, ma con sfondo trasparente. Verrà visualizzata solo la vista blu con l'etichetta. Quando viene presentato questo ViewController, è con sfondo trasparente, ma non appena completa la transizione, rimarrà con lo sfondo nero. Già disattivato l'opzione opaca, e testato alcune opzioni, ma nulla di questo risoluzione dei problemi.

Alcuni possono aiutarmi?

Il video è un test nel simulatore sul case (https://www.youtube.com/watch?v=wT8Uwmq9yqY).

sto iniziando con Swift, e sto ancora abbastanza perso con il modo di programmare in Xcode, ho letto una risposta a una domanda che ha il seguente codice per risolvere questo:

self.presentingViewController.providesPresentationContextTransitionStyle = YES; 
self.presentingViewController.definesPresentationContext = YES; 
modal.modalPresentationStyle = UIModalPresentationOverCurrentContext; 

Dove Ho messo questo codice?

+0

Vedere questo: http://stackoverflow.com/questions/27669699/transparent-background-for-modally-presented-viewcontroller – joern

+0

Devo mantenere il passaggio tra il pulsante e il ViewController (modale)? perché senza segue non presenta nulla, con le seguenti caratteristiche di sfondo nero ancora. –

+0

Riferiscilo: http://stackoverflow.com/questions/26598099/present-uiviewcontroller-as-a-modal-with-transparent-background?rq=1 –

risposta

172

Si può fare in questo modo:

nel controller vista principale:

func showModal() { 
    let modalViewController = ModalViewController() 
    modalViewController.modalPresentationStyle = .overCurrentContext 
    presentViewController(modalViewController, animated: true, completion: nil) 
} 

nel controller di vista modale:

class ModalViewController: UIViewController { 
    override func viewDidLoad() { 
     view.backgroundColor = UIColor.clearColor() 
     view.opaque = false 
    } 
} 

Se si sta lavorando con uno storyboard:

Basta aggiungere uno Storyboard Segue con Kind set per Present Modally al controller di vista modale e su questo controller di vista impostare i seguenti valori:

  • sfondo = Clear Color
  • Disegno = deselezionare la casella opaco
  • Presentazione = nel contesto attuale

Come Crashalot ha sottolineato nel suo commento: assicurarsi che il segue utilizza solo Default per Presentation e Transition. L'utilizzo di Current Context per Presentation rende il turno modale nero invece di rimanere trasparente.

+0

Stai lavorando con gli storyboard? Si prega di consultare la mia risposta modificata.Ho appena provato e funziona – joern

+0

Dopo la modifica, seguire le sue istruzioni e ha funzionato correttamente. Grazie mille! –

+0

Nessun problema, lieto di aver aiutato :-) – joern