如何将 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 文档

有关

笔记