Ich habe eine einfache Taschenrechner UI, in dem ich versuche, einen Gradienten programmgesteuert zum Hintergrund des Ergebnisses/Ausgabe Label hinzuzufügen. Problem ist, dass Sie das nur mit Subviews tun können, wenn Sie immer noch an der Front zeigen wollen. Aber wenn ich das mache, wird die Benutzeroberfläche auf dem Bildschirm verzerrt.Bildschirm verzerrt, wenn ich eine Unteransicht hinzufügen
Unten sind zwei Stackoverflow Fäden, die für Aufgaben wie bei mir mit Subviews vorschlagen:
Adding a CGGradient as sublayer to UILabel hides the text of label
Der Code Ich benutze die Gradienten durch Subviews hinzufügen wird auf den oben genannten Lösungen basieren:
let gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRectMake(1, 1, resultLabel.frame.width-2, resultLabel.frame.height-2) //resultLabel.bounds
gradientLayer.colors = [UIColor.greenColor().CGColor as CGColorRef, UIColor.blueColor().CGColor as CGColorRef]
gradientLayer.locations = [0.0, 1.0]
var labelBackground = UIView(frame: resultLabel.frame)
resultLabel.backgroundColor = UIColor.clearColor()
resultLabel.frame = resultLabel.bounds
labelBackground.layer.addSublayer(gradientLayer)
labelBackground.addSubview(resultLabel)
self.view.addSubview(labelBackground)
Obwohl es die erforderliche Steigung anwendet, ist das Display dist stark sortiert.
Ich verwende Swift 2.2 mit Xcode 7.3.1
Was mache ich falsch?
Vor Gradienten durch Subviews Zugabe:
Nach:
sind Gradienten nicht auf 'CALayer' Ebene? –
Wahr, aber für ein UILabel, wenn Sie einen CALayer einfach als Sublayer hinzufügen, wird der Beschriftungstext ausgeblendet (Sie sehen also nur den Verlauf). Die Subview-Methode wird verwendet, um eine Farbverlaufsschicht hinzuzufügen und gleichzeitig den Etikettentext vorne zu halten. – Ahmad
Haben Sie schon 'insertSublayer (_: CALayer, unten: CALayer)' oder 'insertSublayer (_: CALayer, atIndex: Int)' schon probiert? –