Đây là câu trả lời chung vì lợi ích của người xem trong tương lai. Nó dựa trên tiêu đề câu hỏi chứ không phải chi tiết của câu hỏi gốc.
Làm thế nào để thêm một UIImage đến một CALayer
Bạn có thể thêm hình ảnh vào một điểm của layer
chỉ đơn giản bằng cách sử dụng contents
tài sản của mình:
myView.layer.contents = UIImage(named: "star")?.cgImage
- Lưu ý rằng
UIImage
cần phải được chuyển đổi sang a CGImage
.
Nếu bạn muốn thêm hình ảnh trong lớp của mình, bạn có thể làm điều đó như thế này:
let myLayer = CALayer()
let myImage = UIImage(named: "star")?.cgImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)
Sửa đổi sự xuất hiện
Đoạn mã trên tạo ra một cái nhìn như thế này. Màu xanh dương nhạt là UIView
và ngôi sao màu xanh đậm là UIImage
.
Như bạn có thể thấy, mặc dù, nó có vẻ pixelated. Điều này là do UIImage
nhỏ hơn UIView
do đó nó đang được thu nhỏ để lấp đầy chế độ xem, đây là mặc định mà bạn không chỉ định bất kỳ điều gì khác.
Ví dụ bên dưới hiển thị các biến thể trên thuộc tính contentsGravity
của lớp. Mã này trông như thế này:
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
Trong iOS, bạn có thể muốn thiết lập các isGeometryFlipped
property để true
nếu bạn đang làm bất cứ điều gì với đầu hoặc trọng lực dưới, nếu không nó sẽ là ngược với những gì bạn mong đợi. (Chỉ có lực hấp dẫn là lộn theo chiều dọc, chứ không phải vẽ nội dung. Nếu bạn đang gặp rắc rối với nội dung đang được lật, xem this answer.)
Có hai UIView
ví dụ dưới đây cho mỗi thiết lập contentsGravity
, một cái nhìn lớn hơn UIImage
và cái còn lại nhỏ hơn.Bằng cách này bạn có thể thấy được ảnh hưởng của việc mở rộng và trọng lực.
kCAGravityResize
Đây là mặc định.
kCAGravityResizeAspect
kCAGravityResizeAspectFill
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
liên quan
Tôi đoán setNeedsDisplay đã tạo lớp để vẽ lại nội dung và do đó xóa hình ảnh. – Bastian
Điều này cũng giúp tôi. cảm ơn Adriana. –