Moderne Technik zum Hinzufügen von Farbverläufen zu UIView

Ich kenne verschiedene Möglichkeiten, um UIView Hintergrundverläufe hinzuzufügen. Ich habe mich gefragt, was der effizienteste und skalierbarste Weg ist und warum. Hier sind die Techniken, die ich verwendet habe:

Erstellen Sie eine Unteransicht von UIView und überschreiben Sie drawRect, wobei ich den Verlauf im aktuellen Kontext zeichne.

ein. Wenn Sie den obigen Verlauf verwenden, erstellen Sie ihn mit den Ansichtsgrenzen, die ich als erste Unteransicht dekorieren und einfügen möchte, d. H.– insertSubview:atIndex:

b. Nachdem ich die Hintergrundverlaufsansicht von oben erhalten habe, rendere ich sie im Bildkontext und verwende sie als Hintergrundbild, d. H.

UIGraphicsBeginImageContext(gradView.bounds.size);
[gradView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *gradientImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIColor *background = [UIColor colorWithPatternImage:gradientImg];
self.view.backgroundColor = background;

Erstellen Sie eine dehnbare PNG-Datei und verwenden Sie diese, um den Hintergrund der Ansicht zu dekorieren. Die Technik ist der Art und Weise, wie Sie UIButton dekorieren, sehr ähnlich.

-(UIColor *)backgroundColor:(CGRect)frame
{
    UIImage *bg = [UIImage imageNamed:@"background_23x36"];
    bg = [bg resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 11.0, 0.0, 11.0)];
    UIGraphicsBeginImageContextWithOptions(frame.size, YES, [[UIScreen mainScreen] scale]);
    [bg drawInRect:frame];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return [UIColor colorWithPatternImage:image];
}

Erstellen Sie eine Unteransicht von UIView. Verwenden Sie jedoch CAGradientLayer, anstatt drawRect zu überschreiben. Ähnlich zuhttp://nscookbook.com/2013/04/recipe-20-using-cagradient-layer-in-a-custom-view/

Was ist die effizienteste und skalierbarste Methode, um einen Farbverlauf als Hintergrund hinzuzufügen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage