如何將 UIImage 新增到 CALayer

你只需使用其 contents 屬性即可將影象新增到檢視的 layer

myView.layer.contents = UIImage(named: "star")?.CGImage
  • 請注意,UIImage 需要轉換為 CGImage

如果你希望在自己的圖層中新增影象,可以這樣做:

let myLayer = CALayer()
let myImage = UIImage(named: "star")?.CGImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)

修改外觀

上面的程式碼生成了這樣的檢視。淺藍色是 UIView,深藍色的星星是 UIImage

StackOverflow 文件

但是,正如你所看到的,它看起來像是畫素化的。這是因為 UIImage 小於 UIView 所以它被縮放以填充檢視,這是預設情況下你沒有指定任何其他內容。

以下示例顯示了圖層的 contentsGravity 屬性的變體。程式碼如下所示:

myView.layer.contents = UIImage(named: "star")?.CGImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.geometryFlipped = true

在 iOS 中,如果你正在執行具有頂部或底部重力的任何操作,則可能需要將 geometryFlipped 屬性設定為 true ,否則它將與你期望的相反。 (只有重力垂直翻轉,而不是內容呈現。如果你在翻轉內容時遇到問題,請參閱此 Stack Overflow 應答 。)

每個 contentsGravity 設定下面有兩個 UIView 示例,一個檢視大於 UIImage,另一個檢視小。這樣你就可以看到縮放和重力的影響。

kCAGravityResize

這是預設值。

StackOverflow 文件

kCAGravityResizeAspect

StackOverflow 文件

kCAGravityResizeAspectFill

StackOverflow 文件

kCAGravityCenter

StackOverflow 文件

kCAGravityTop

StackOverflow 文件

kCAGravityBottom

StackOverflow 文件

kCAGravityLeft

StackOverflow 文件

kCAGravityRight

StackOverflow 文件

kCAGravityTopLeft

StackOverflow 文件

kCAGravityTopRight

StackOverflow 文件

kCAGravityBottomLeft

StackOverflow 文件

kCAGravityBottomRight

StackOverflow 文件

有關

筆記