2017-02-13 5 views
2

Ich versuche, in Xamarin iOS einen Hintergrund Gradienten wie dies programmatisch festgelegt:Xamarin - Gradient Hintergrund

CGColor[] colors = new CGColor[] { new UIColor(red: 0.05f, green:0.44f, blue:0.73f, alpha:1.0f).CGColor, 
       new UIColor(red: 45/255, green: 128/255, blue: 153/255, alpha: 0.01f).CGColor}; 
      CAGradientLayer gradientLayer = new CAGradientLayer(); 
      gradientLayer.Frame = this.View.Bounds; 
      gradientLayer.Colors = colors; 
      this.View.Layer.AddSublayer(gradientLayer); 

Und es funktioniert, aber ich habe Formularelemente auf dem Bildschirm (Labels, Buttons, etc.) und dies bewirkt, dass alle von ihnen verblasst erscheinen, als ob die Ebene direkt oben der Elemente erscheint. Ich denke, das ist, was der Code tut - es macht die gesamte Seite rendern und dann die Ebene mit Deckkraft oben auf dem Bildschirm hinzufügen (ich will es stattdessen dahinter).

Was ich stattdessen möchte, ist, dass der Hintergrund als Farbverlauf eingestellt wird, aber alle Elemente, die ich hinzufüge, werden nicht verblasst und versuchen, die Hintergrundfarben anzupassen.

Ich habe versucht, eine Ansicht über der Standardansicht hinzuzufügen, und das Alpha auf 1, Hintergrund auf weiß, aber das schien nicht zu helfen (meine Theorie, dass es programmatisch eine Ebene über alles nachher hinzufügen es ist gerendert).

Was mache ich falsch? Danke!

Antwort

1

Ihr Farbverlaufslayer, der dem Stamm View des ViewController zugeordnet ist, wird "hinter" allen anderen Ansichten angezeigt.

standardmäßig Ansichten (UILabel, UIButton, etc.) haben nicht einen Satz Hintergrundfarbe und wird somit Mischung mit dieser Hintergrundschicht, wenn das nicht der Effekt, den Sie suchen einen Hintergrund zuweisen:

enter image description here

var button = new UIButton(UIButtonType.System); 
button.Frame = new CGRect(40, 300, 120, 40); 
button.SetTitle("No Background", UIControlState.Normal); 
button.TintColor = UIColor.Red; 
View.AddSubview(button); 

var button2 = new UIButton(UIButtonType.System); 
button2.Frame = new CGRect(180, 300, 100, 40); 
button2.SetTitle("Background", UIControlState.Normal); 
button2.TintColor = UIColor.Red; 
button2.BackgroundColor = UIColor.White; 
View.AddSubview(button2); 
+0

hmm, das scheint mir nicht der Fall zu sein; Das Weiß in Ihrem Beispiel wird ausgeblendet und entspricht der Hintergrundfarbe. Ich habe sogar den Hintergrund einer Ansicht auf Rot gesetzt, aber das Rot verschmilzt mit dem Farbverlauf. Auch für meine Labels möchte ich nur, dass die Label-Farbe hell weiß ist und nicht verblasst. Ich möchte keine Hintergrundfarbe auf meinen Etiketten. Irgendwelche Gedanken? TY! – NullHypothesis

+0

@NullHypothesis Ist 'this' in' this.View.Layer.AddSublayer' in Ihrem Beispiel der View-Controller? – SushiHangover

+0

Ja ist es, das ist richtig. – NullHypothesis

2

ich weiß, ich bin spät für die Show, aber für die Zukunft, die ich benutze:

this.View.Layer.InsertSublayer(gradientLayer, 0); 

Die 0 repräsentiert den Index.