2016-08-14 5 views
0

Ich habe eine UILabel, die ich in der Mitte des Bildschirms angezeigt werden soll, unabhängig davon, auf welchem ​​iPhone es gespielt wird!Platzieren UILabel in der Mitte des Bildschirms

Aber ich kann es nicht richtig machen! Es ist immer irgendwo anders, aber nicht in der Mitte.

was mache ich falsch?

Hier ist das Bild und der Code, was passiert!

so not in the middle!

class end: SKScene { 

    var label = UILabel() 


    override func didMoveToView(view: SKView) { 
     scene?.backgroundColor = UIColor(red: CGFloat(59.0/255.0), green: CGFloat(89.0/255.0), blue: CGFloat(152.0/255.0), alpha: CGFloat(1.0)) 

     let w = UIScreen.mainScreen().bounds.width 
     let h = UIScreen.mainScreen().bounds.height 
     label = UILabel(frame: CGRect(x: w/2, y: h/2, width: 120, height: 30)) 
     label.text = "REPLAY" 
     label.center = CGPoint(x: w/2, y: 2) 
     label.textColor = UIColor.whiteColor() 
     self.view?.addSubview(label) 
+0

Es ist einfach, zwei Einschränkungen in IB hinzuzufügen (mittleres Label horizontal und vertikal im Container). Aber warum brauchst du UILabel? UILabel wird zur Ansicht hinzugefügt, nicht zur Szene. Dies kann zusätzliche Handhabung (Beseitigung) erfordern, wenn zu anderen Szenen übergegangen wird. Es gibt einen SKLabelNode, der nicht so mächtig ist wie UILabel, aber es ist eine native SpriteKit-Komponente. – Whirlwind

Antwort

0

Die beste Option für automatische Layout wird. Sie können es vertikal und horizontal ausrichten, um anzuzeigen. Unabhängig von Anzeige oder Ausrichtung funktioniert es.

können Sie entweder Interface Builder verwenden, oder Sie können autolayoutconstraints

9

Ich denke, Ihr Etikett tatsächlich fügen zentriert ist.

Wenn ich hinzufügen, eine rote Hintergrundfarbe wie so:

label.backgroundColor = UIColor.redColor() 

und die vertikale Mitte ändert sich die Mitte des Bildschirms zu sein, das heißt, ändert sich diese Zeile in Ihrem Beispiel:

label.center = CGPoint(x: w/2, y: 2) 

dazu:

label.center = CGPoint(x: w/2, y: h/2) 

ich mit diesem Ende:

centered label but not centered text

Also ist das Etikett tatsächlich zentriert. Der Text ist jedoch nicht zentriert in der Beschriftung, wodurch es scheint, als ob der Text nicht zentriert ist, wenn Sie keine Hintergrundfarbe haben.

Wenn ich die textAlignment-.Center ändern und entfernen Sie die Hintergrundfarbe wieder beende ich mit diesem Ergebnis auf:

centered text in centered label

Das letzte Codebeispiel sieht wie folgt aus:

override func didMoveToView(view: SKView) { 
    scene?.backgroundColor = UIColor(red: CGFloat(59.0/255.0), green: CGFloat(89.0/255.0), blue: CGFloat(152.0/255.0), alpha: CGFloat(1.0)) 

    let w = UIScreen.mainScreen().bounds.width 
    let h = UIScreen.mainScreen().bounds.height 

    label = UILabel(frame: CGRect(x: w/2, y: h/2, width: 120, height: 30)) 
    label.text = "REPLAY" 
    label.center = CGPoint(x: w/2, y: h/2) 
    label.textAlignment = .Center 
    label.textColor = UIColor.whiteColor() 
    self.view?.addSubview(label) 
} 

Und wenn Alles was gesagt wird, dann sollten Sie vielleicht in das SKLabelNode schauen, wie @whirlwind in dem Kommentar vorschlägt, auf diese Weise wird Ihr Etikett ein integrierter Teil des SKScene ein nd nicht etwas, das mit der äußeren UIView verschraubt ist (wenn das für Sie einen Sinn ergibt).

Hoffe das hilft dir.

+0

Ich kann nicht glauben, dass ich so dumm war! Vielen vielen Dank, Sir!!! –

+0

@OsaamaShehzad Sie sind willkommen, froh, dass Sie es funktionierte und lernte etwas über zentriert ausgerichteten Text auf dem Weg. Fühlen Sie sich nicht dumm ... wir sind alle da ... täglich :) Fühlen Sie sich frei, die Antwort als akzeptiert zu markieren, wenn Sie denken, dass es Ihnen geholfen hat :) – pbodsk

+0

Danke! Es funktioniert gut. – Raja

Verwandte Themen