用 CGImage 覆盖 CALayer

Covering a CALayer with a CGImage

我有一个 CGImage,我想在 CALayer 中显示。将内容和重力设置为左下角的效果与预期一致。

layer.contents = cgimage
layer.contentsGravity = .bottomLeft

现在我想要居中并覆盖整个图层。使用 .center 只是将内容中心移到左下角。

layer.contents = cgimage
layer.contentsGravity = .center

只有当我将位置设置为视图的中心时,它才会按预期显示。

layer.contents = cgimage
layer.contentsGravity = .center
layer.position = CGPoint(x: view.frame.width/2, y: view.frame.height/2)

但是当重力设置为 resize-aspect-fill 时,任何东西都不会显示 - 无论是否设置位置。

layer.contents = cgimage
layer.contentsGravity = .resizeAspectFill

我觉得我缺少一些基本的东西。

为什么 CALayer 中的 CGImage 不覆盖完整尺寸并保持纵横比?

我可以显示图像填充。我认为你的视图在父视图中不居中。

    let view = UIView.init(frame: self.view.bounds)
    self.view.addSubview(view)
    view.layer.contents = UIImage.init(named:"ic_control_group_unselect_on")?.cgImage
    view.layer.contentsGravity = .resize

对于 .resize.resizeAspectFill 类型的 contentGravity 来说,必须显式设置 CALayer 的框架。对于 .center.bottomLeft 你可以不用。