2017-10-30 3 views
0

Ich habe versucht, eine UIImage 's CGImage als Inhalt layer und dann fügen Sie die layer zu view' s layer.
Es sollte fünf Sterne in der Mitte der gelben Ansicht sein. Das ist es, was ich will.
Aber es scheint, dass das Zentrum der Sterne mit der origin der view ausgerichtet ist. Was soll ich tun, um es zu korrigieren?Wie zentriere ich ein CGImage auf einem CALayer?

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) 

} 

enter image description here Hier die Sterne für Sie im Falle Sie testen möchten. enter image description here

Antwort

3

baseLayer haben keinen definierten Rahmen so baseLayer.contentsGravity = kCAGravityCenter wird gut funktionieren, aber es wird immer noch auf dem potision (0, 0).

Es gibt zwei mögliche Lösungen:

1: Machen Sie einen Rahmen von baseLayer, die rect identisch ist. Implementieren Sie diesen Code:

baseLayer.frame = rect.frame 

2: Stellen Sie die Position des baseLayer zum Zentrum von rect. Implementieren Sie diesen Code:

baseLayer.position = rect.center 
+0

Danke Mann. Ich dachte, dass es keinen Grund gibt, den Rahmen zu setzen. – JsW

2

Um die starsimage in der Mitte des CALayer zu platzieren, geben die frame der Schicht, das heißt

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

Für jede Art von CALayer, müssen Sie seine frame definieren ausdrücklich.

+0

Danke. Es funktioniert, aber ich werde Cyan's Antwort anpassen, weil er früher ist. – JsW

+0

Sicher..keine Probleme..Happy code .. :) – PGDev

Verwandte Themen