2014-06-20 11 views
23

Qual è la sintassi corretta per questa funzione in Swift?colorWithAlphaComponent example in Swift

Il seguente funziona bene, ed i colori di sfondo viola:

self.view.backgroundColor = UIColor.purpleColor() 

Quando catena funzione colorWithAlphaComponent, la vista mostra l'alfa corretto per un istante, e quindi cambia ad un viola opaco che è relativamente scura :

self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0.5) 

Questa è la funzione consigliata per aggiungere un valore alfa a un UIColor?

Inoltre, perché il popup intellisense dice che questa funzione si aspetta un UIColor come parametro? Ad es.,

self.view.backgroundColor = UIColor.colorWithAlphaComponent(<#UIColor#>) 

MODIFICA: il comportamento è strano. Sto impostando il colore di sfondo su un controller di visualizzazione che viene caricato in una modale. Mentre la modale scorre dal basso, l'alfa è corretta. Quando finisce il caricamento modale, il colore dello sfondo diventa opaco ?!

MODIFICA 2: Il problema non era con il codice: sia il codice sopra che il suggerimento sotto stavano applicando correttamente l'alfa. Il problema è il modo in cui vengono presentate le modali: la vista sottostante viene rimossa. Vedi:
Transparent Modal View on Navigation Controller

+0

per curiosità hai provato 'UIColor (rosso: 0.5, verde: 0, blu: 0.5, alfa: 0.5)'? – fqdn

+0

Ho appena provato; lo stesso comportamento di quando si usa '.colorWithAlphaComponent (0.5)'. Vedi modifica. – kmiklas

+0

strano, 'colorWithAlphaComponent' è un metodo di istanza e non un metodo di classe. Se questo è definito come metodo di classe, allora come per la funzionalità dovrebbe prendere un colore e fluttuare come parametri. –

risposta

50

Non è strano, si sta comportando esattamente come dovrebbe. Sebbene molti dei metodi di UIColor siano metodi di classe, ci sono ancora alcuni metodi di istanza, e questo è uno di questi. Da the UIColor documentation.

colorWithAlphaComponent:

Crea e restituisce un oggetto color che ha gli stessi valori di spazio colore e componenti come il ricevitore, ma ha il componente alfa specificato.

Quindi, colorWithAlphaComponent: cambia semplicemente il valore alfa del suo ricevitore. Esempio:

let purple = UIColor.purpleColor() // 1.0 alpha 
let semi = purple.colorWithAlphaComponent(0.5) // 0.5 alpha 

E il motivo per cui si sta vedendo il completamento automatico per questo metodo di istanza del tipo, è perché Swift consente di utilizzare metodi di istanza come metodi di tipo curry. Nell'esempio che hai fornito, colorWithAlphaComponent restituisce effettivamente una funzione che accetta un CGFloat come input e restituisce un UIColor.

let purple = UIColor.purpleColor() 
let purpleFunc: (CGFloat -> UIColor) = UIColor.colorWithAlphaComponent(purple) 

Quindi, se si voleva, si potrebbe chiamare il metodo tipo passando l'istanza che si desidera modificare, e quindi chiamare la funzione risultante con l'alfa che si desidera applicare, in questo modo.

let purple = UIColor.purpleColor() 
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5) 

Poi per quanto riguarda i problemi che stai avendo con il controller di vista modale andare, non dovrebbe essere il tentativo di modificare l'alfa della vista di un controller di vista modale. See this for more info.Invece, si dovrebbe essere la creazione di manualmente una vista e aggiungerla alla vista della gerarchia del controller vista esistente (se è assolutamente necessario modificare la sua alfa)

+0

Thx. Sto cercando di "oscurare" lo sfondo quando appare la modale. In altre parole, il contenuto modale effettivo occupa solo circa 300x200pt sullo schermo. Voglio che l'area al di fuori del contenuto sia disattivata. Quando l'utente tocca su di esso, chiuderà il modale. – kmiklas

+0

In una delle altre risposte (in basso), viene identificata un'impostazione: 'Il modo più semplice è usare la proprietà modalPresentationStyle di navigationController' Aggiornamento – kmiklas

+1

Swift 3: non più" colorWithAlphaComponent (_ :) ". Ora è solo "withAlphaComponent" ... quindi purple.withAlphaComponent (0.5) per l'esempio. – davidrynn

2

Prova smth come questo per impostare il colore

view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0) 
11

Swift 4,0

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7) 
4

a Swift 3,0

Questo funziona per me in xcode 8.2.

yourView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

Può ti aiuta.