43 votes

Existe-t-il un moyen de créer une couleur d'arrière-plan dégradée dans le constructeur d'interface ?

Pour mon application, j'utilise un TableView et des UITableViewCells personnalisés.

J'ai personnalisé mes cellules via le constructeur d'interface, pas par programmation. Existe-t-il un moyen de faire également de la couleur d'arrière-plan de ma cellule personnalisée un dégradé dans le générateur d'interface ?

Merci.

61voto

etayluz Points 175

Cela fonctionne pour Swift 3.0 : (mis à jour pour Swift 4.0)

 @IBDesignable
final class GradientView: UIView {
    @IBInspectable var startColor: UIColor = UIColor.clear
    @IBInspectable var endColor: UIColor = UIColor.clear

    override func draw(_ rect: CGRect) {
        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.frame = CGRect(x: CGFloat(0),
                                y: CGFloat(0),
                                width: superview!.frame.size.width,
                                height: superview!.frame.size.height)
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.zPosition = -1
        layer.addSublayer(gradient)
    }
}

entrez la description de l'image ici

entrez la description de l'image ici

13voto

Ali Raza Points 2258
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = yourView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)    [[UIColor whiteColor] CGColor], nil];
[yourView.layer insertSublayer:gradient atIndex:0];

7voto

Sudesh Kumar Points 560

Oui c'est possible : Faire une image en dégradé avec 1 pix de hauteur X. Définissez ceci sur backgroundColor pour la cellule.

 cell.backgroundColor =  [UIColor colorWithPatternImage:[UIImage imageNamed:@"gradImage.png"]];

** Vous pouvez définir la couleur du dégradé avec le code, mais son processus prend du temps. Si vous remplissez mieux, recherchez-le.

5voto

alfhern Points 141

la réponse d'etayluz fonctionne bien mais j'ai ajouté quelques modifications :

  1. Taille du dégradé définie par les propres limites du calque, pas par la vue d'ensemble.
  2. Supprimez le calque de dégradé à chaque dessin, afin qu'il ne continue pas à dessiner et à ajouter un nouveau calque lorsque le retraçage est nécessaire (par exemple en appelant .setNeedsDisplay() lors de la rotation).

     @IBDesignable final class MFGradientView: UIView {
    
        @IBInspectable var startColor: UIColor = UIColor.clear
        @IBInspectable var endColor: UIColor = UIColor.clear
    
        override func draw(_ rect: CGRect) {
           layer.sublayers?.first?.removeFromSuperlayer()
    
           let gradient: CAGradientLayer = CAGradientLayer()
           gradient.frame = CGRect(origin: CGPoint.zero, size: self.bounds.size)
           gradient.colors = [startColor.cgColor, endColor.cgColor]
           layer.insertSublayer(gradient, at: 0)
        }
    } 
    

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X