Swift 如何在CALayer上居中放置CGImage?

Swift 如何在CALayer上居中放置CGImage?,swift,calayer,cgimage,Swift,Calayer,Cgimage,我试图将UIImage的CGImage设置为层的内容,然后将层添加到视图层 黄色视图的中心应该是五颗星。这就是我想要的。 但星星的中心似乎与视图的原点对齐。 我该怎么做才能纠正它 func putOnStars() { let rect = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) rect.background

我试图将
UIImage
CGImage
设置为
的内容,然后将
添加到
视图

黄色视图的中心应该是五颗星。这就是我想要的。
但星星的中心似乎与
视图的
原点对齐。
我该怎么做才能纠正它

func putOnStars() {
    let rect = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
    rect.backgroundColor = .yellow
    view.addSubview(rect)

    let baseLayer = CALayer()
    baseLayer.contents = UIImage(named: "stars")?.cgImage
    baseLayer.contentsGravity = kCAGravityCenter
    rect.layer.addSublayer(baseLayer)

}
这是星星的图片,以防你想测试。
baseLayer
没有定义的帧,因此
baseLayer.contentsGravity=kCAGravityCenter
可以正常工作,但它仍将位于潜在位置(0,0)

有两种可能的解决方案:

1:制作一个与
rect
相同的
baseLayer
帧。执行此代码:

baseLayer.frame = rect.frame
baseLayer.position = rect.center
2:将
baseLayer
的位置设置为
rect
的中心。执行此代码:

baseLayer.frame = rect.frame
baseLayer.position = rect.center

baseLayer
没有定义的帧,因此
baseLayer.contentsGravity=kCAGravityCenter
可以正常工作,但它仍将位于潜在位置(0,0)

有两种可能的解决方案:

1:制作一个与
rect
相同的
baseLayer
帧。执行此代码:

baseLayer.frame = rect.frame
baseLayer.position = rect.center
2:将
baseLayer
的位置设置为
rect
的中心。执行此代码:

baseLayer.frame = rect.frame
baseLayer.position = rect.center

要将
星星
图像
放置在
CALayer
的中心,请给出该层的
框架
,即

    let baseLayer = CALayer()
    baseLayer.frame = rect.bounds //This Line
    baseLayer.contents = UIImage(named: "stars")?.cgImage
    baseLayer.contentsGravity = kCAGravityCenter
    rect.layer.addSublayer(baseLayer)

对于任何类型的
CALayer
,您都需要明确定义其
框架。

要将
星星
图像
放置在
CALayer
的中心,请给出该层的
框架,即

    let baseLayer = CALayer()
    baseLayer.frame = rect.bounds //This Line
    baseLayer.contents = UIImage(named: "stars")?.cgImage
    baseLayer.contentsGravity = kCAGravityCenter
    rect.layer.addSublayer(baseLayer)

对于任何类型的
CALayer
,都需要明确定义其
框架。

谢谢。我想没有必要设置框架。谢谢你。我认为没有必要设置框架。谢谢。这是可行的,但我会修改青色的答案,因为他比我早。当然……没问题……编码愉快……)谢谢。这是可行的,但我会修改青色的答案,因为他比我早。当然……没问题……编码愉快……)