2013-02-15 2 views
7

Ich möchte einen Farbverlauf als Hintergrund für eine UIView verwenden. Ich weiß, dass dies in der Regel mit Bildern und der backgroundColor Eigenschaft geschieht. Ich möchte jedoch lernen, wie man das im Code macht. Mit https://stackoverflow.com/a/1931498/99683 kann ich ein UIView programmgesteuert erstellen und es eine Farbverlaufsschicht geben. Das funktioniert großartig.UIView Hintergrund Farbverlauf mit Interface Builder Ansicht

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 340, 280, 100)]; 
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = view.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil]; 
[view.layer insertSublayer:gradient atIndex:0]; 
[self.view addSubview:view]; 

Allerdings, wenn ich einen Blick in Interface Builder (mit Hintergrund löschen gesetzt) ​​legen und versuchen, die gleiche Sache zeigt die Gradient nie auf.

CAGradientLayer *gradient2 = [CAGradientLayer layer]; 
gradient2.frame = self.containerView.bounds; 
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor], (id)[[UIColor greenColor] CGColor], nil]; 
[self.containerView.layer insertSublayer:gradient2 atIndex:0]; 

Gibt es noch etwas, was ich in IB oder Code tun muss, damit dies funktioniert?

+2

Hallo. Was ist "Selbst" hier? ein UITableViewCell? Meine beste Empfehlung ist, eine UIView zu implementieren und die Zeichnung in der drawRect-Methode zu machen :) und dann diese UIView-Unterklasse in Ihrem XIB zu verwenden, wenn Sie es so schlecht wollen :-), aber es ist nur eine persönliche Empfehlung, ich bin kein großer Fan von IB. – Vinzius

+0

'self' ist der View-Controller und' containerView' ist der IB-Ausgang zum 'UIView'-Objekt. Ja, an diesem Punkt möchte ich dies mehr als eine akademische Übung als alles andere tun. Ich muss die Unterklasse und die 'drawRect' Methode ausprobieren. –

+1

Die Unterklasse und 'DrawRect' Methode funktioniert wunderbar für mich. Danke @Vinzius! Immer noch neugierig zu wissen, ob es eine einfachere Möglichkeit gibt, Farbverläufe mit IB-Ansichten zu erstellen. :) –

Antwort

3

Ich sah das gleiche Problem, aber schließlich festgestellt, dass die UIView nicht an der Stelle im Code erstellt wurde, wo Sie versuchen, Hintergrund Farbverlauf zu setzen, die ich in Ihrem Fall denke, könnte einer der folgenden sein - viewDidLoad oder - viewWillAppear wegen deren

self.containerView.bounds wird {{0, 0}, {0, 0}}

Stattdessen Sie den Gradienten gesetzt sollte Schicht innerhalb

viewDidAppear

, an welchem ​​Punkt die Ansichten erstellt wurden.