To jest ogólna odpowiedź dla przyszłych widzów. Opiera się na tytule pytania, a nie na szczegółach pierwotnego pytania.
Jak dodać UIImage w CALayer
Można dodać zdjęcie do widokiem na layer
po prostu za pomocą swojego contents
właściwość:
myView.layer.contents = UIImage(named: "star")?.cgImage
- Uwaga że
UIImage
musi zostać przekształcony a CGImage
.
Jeśli chcesz dodać zdjęcie na osobnej warstwie, można zrobić to tak:
let myLayer = CALayer()
let myImage = UIImage(named: "star")?.cgImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)
Modyfikacja wyglądu
Powyższy kod tworzy widok takiego. Jasnoniebieski to UIView
, a ciemnoniebieska gwiazda to UIImage
.

Jak widać, choć wygląda na piksele. Dzieje się tak, ponieważ UIImage
jest mniejszy niż UIView
, więc jest skalowany, aby wypełnić widok, co jest domyślnym, że nie określasz niczego innego.
Poniższe przykłady pokazują odmiany właściwości warstwy contentsGravity
. Kod wygląda następująco:
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
w iOS, możesz ustawić isGeometryFlipped
property do true
jeśli robisz coś z górnej lub dolnej grawitacji, w przeciwnym razie będzie to przeciwieństwo tego, co można się spodziewać. (Jedynie grawitacja jest odwrócony w pionie, a nie renderowanie treści. Jeśli masz problemy z zawartością są odwrócone, zobacz this answer.)
Istnieją dwa UIView
Poniższe przykłady dla każdego ustawienia contentsGravity
, jeden widok jest większy niż UIImage
a drugi jest mniejszy.W ten sposób możesz zobaczyć efekty skalowania i grawitacji.
kCAGravityResize
Jest to ustawienie domyślne.

kCAGravityResizeAspect

kCAGravityResizeAspectFill

kCAGravityCenter

kCAGravityTop

kCAGravityBottom

kCAGravityLeft

kCAGravityRight

kCAGravityTopLeft

kCAGravityTopRight

kCAGravityBottomLeft

kCAGravityBottomRight

pokrewne
Domyślam się, że setNeedsDisplay spowodował, że warstwa przerysowywała zawartość i usuwała obraz. – Bastian
To też mnie zadziałało. dzięki Adriana. –