Questa è una risposta generale per il futuro dei telespettatori. Si basa sul titolo della domanda piuttosto che sui dettagli della domanda originale.
Come aggiungere un UIImage ad un CALayer
È possibile aggiungere un'immagine a un punto di vista di layer
semplicemente utilizzando la sua proprietà contents
:
myView.layer.contents = UIImage(named: "star")?.cgImage
- Nota che le
UIImage
deve essere convertito a a CGImage
.
Se si desidera aggiungere l'immagine nel proprio livello, si può fare in questo modo:
let myLayer = CALayer()
let myImage = UIImage(named: "star")?.cgImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)
modificare l'aspetto
Il codice precedente produce una vista come questo. L'azzurro è il UIView
e la stella blu scuro è il UIImage
.

Come si può vedere, però, sembra pixel. Questo perché lo UIImage
è più piccolo dello UIView
quindi è ridimensionato per riempire la vista, che è quella predefinita che non si specifica nient'altro.
Gli esempi seguenti mostrano variazioni sulla proprietà contentsGravity
del livello. Il codice è simile al seguente:
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
In iOS, è possibile impostare il isGeometryFlipped
property per true
se si sta facendo qualcosa con la parte superiore o la gravità basso, altrimenti sarà l'opposto di quello che ci si aspetta. (La gravità è capovolto solo verticalmente, non il rendering del contenuto. Se si hanno problemi con il contenuto che viene capovolto, vedi this answer.)
Ci sono due UIView
esempi qui sotto per ogni ambiente contentsGravity
, un punto di vista è più grande della UIImage
e l'altro è più piccolo.In questo modo puoi vedere gli effetti del ridimensionamento e della gravità.
kCAGravityResize
Questa è l'impostazione predefinita.

kCAGravityResizeAspect

kCAGravityResizeAspectFill

kCAGravityCenter

kCAGravityTop

kCAGravityBottom

kCAGravityLeft

kCAGravityRight

kCAGravityTopLeft

kCAGravityTopRight

kCAGravityBottomLeft

kCAGravityBottomRight

correlati
Immagino che setNeedsDisplay abbia reso il livello per ridisegnare il contenuto e quindi eliminare l'immagine. – Bastian
Anche questo ha funzionato. grazie Adriana. –