2017-09-06 5 views
0

Mit diesem Code Ändern der Größe I Hintergrund zu einem UIButton mit Farbverlauf hinzufügen:Add UIButton Hintergrund mit Farbverlauf

public func addBackgroundAndGradient(to: UIView, gradient1: CGColor, gradient2: CGColor, cornerRadius: CGFloat = 5){ 
    let backgroundImage = UIImageView() 
    backgroundImage.frame.size = to.frame.size 
    backgroundImage.clipsToBounds = true 
    backgroundImage.layer.borderColor = UIColor.white.cgColor 
    backgroundImage.layer.borderWidth = 0.5 
    to.insertSubview(backgroundImage, at: 0) 

    let gradient = CAGradientLayer() 
     let gradient1 = UIColor(red: 200/255, green: 100/255, blue: 5/255, alpha: 1).cgColor 
     let gradient2 = UIColor(red: 1, green: 128/255, blue: 0, alpha: 1).cgColor 
     gradient.colors = [gradient1, gradient2, gradient2, gradient1] 

    gradient.locations = [0.0, 0.35, 0.65, 1.0] 
    gradient.frame.size = to.frame.size 
    backgroundImage.layer.addSublayer(gradient) 
    backgroundImage.layer.cornerRadius = cornerRadius 
} 

Allerdings, wenn ich einen neuen Titel für die UIButton eingestellt, die Größe des Hintergrund nicht. Wenn der Text länger als der ursprüngliche Text ist, wird der Text über den Hintergrund hinausgehen.

Wie kann ich einen Größenänderungshintergrund mit Farbverlauf für einen UIButton erstellen?

Antwort

0

, dies zu tun, müssen Sie eine benutzerdefinierte UIButton Unterklasse erstellen, und CAGradientLayer als Schichtklasse zu setzen:

class ExpandableGradientButton: UIButton { 

override class var layerClass: AnyClass { 
    get { 
      return CAGradientLayer.self 
     } 
    } 
} 

Dann müssen Sie Ihre Funktion ändern:

@IBOutlet weak var expandableGradientButton: ExpandableGradientButton! 
... 
public func addBackgroundAndGradient(to: UIView, gradient1: CGColor, gradient2: CGColor, cornerRadius: CGFloat = 5){ 
    let backgroundImage = UIImageView() 
    backgroundImage.frame.size = to.frame.size 
    backgroundImage.clipsToBounds = true 
    backgroundImage.layer.borderColor = UIColor.white.cgColor 
    backgroundImage.layer.borderWidth = 0.5 

    let gradient1 = UIColor(red: 100/255, green: 140/255, blue: 2/255, alpha: 1).cgColor 
    let gradient2 = UIColor(red: 123/255, green: 158/255, blue: 54.0/255.0, alpha: 1).cgColor 
    if let butonLayer = to.layer as? CAGradientLayer 
    { 
     butonLayer.colors = [gradient1, gradient2, gradient2, gradient1] 
     butonLayer.locations = [0.0, 0.35, 0.65, 1.0] 
     butonLayer.cornerRadius = cornerRadius 
    } 
} 

Mit anderen Worten, Sie müssen die Farbverlaufsebene als UIButton-Ebene verwenden und die Größe wird automatisch angepasst. Hinweis: Dies kann auch für jede andere UIView-Unterklasse verwendet werden, nicht nur für UIButton.

Verwandte Themen