2016-06-21 1 views
-2

J'ai créé une classe qui hérite de l'objet de vue (UIButton) Je ne comprends pas pourquoi quand je suis en train de changer le backgroundColor que j'ajouter à drawRect func par init ou par awakeFromNib func réussir, mais quand J'essaie de changer la propriété de la couche que j'ajoute dans drawRect func (comme self.layer.cornerRadius), elle ne change pas par init ou par awakeFromNib func.IOS - Les propriétés de la couche func drawRect ne peuvent pas être modifiées?

Deux questions: 1. Quelqu'un peut-il m'expliquer ce qui s'est passé dans les coulisses? 2. comment puis-je changer la propriété de la couche ajoutée dans drawRect func?

Désolé pour mon fragile Anglais J'espère qu'il est assez clair :)

Voici mon code simple exemple:

import UIKit 

class Btn:UIButton { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder); 
     self.backgroundColor=UIColor.cyanColor(); 
     self.layer.borderWidth=1; 
    } 

    override func awakeFromNib() { 
     self.backgroundColor=UIColor.brownColor(); // it was changed to brown 
     self.layer.borderWidth=3; // it changed to 3 
     self.layer.cornerRadius=20;// it doesn't changed to 20 
     // it's stay 5 from drawRect func (down here) whyyy???    
    } 

    override func drawRect(rect: CGRect) { 
     self.backgroundColor=UIColor.greenColor(); 
     self.layer.cornerRadius=5; 
    } 
} 
+0

Je ne pense pas avoir compris la question. 'drawRect' est appelé après' awakeFromNib', donc si vous le placez dans les deux alors le 'drawRect' va juste écraser celui dans' awakeFromNib' – dan

+0

alors pourquoi la couleur de fond que je reçois est marron, selon votre réponse le drawRect écraser celui dans awakeFromNib alors pourquoi je ne vois pas greenColor ?? –

Répondre

1

Comment puis-je changer la propriété de la couche qui a été ajoutée dans drawRect func?

Do not. Ne modifiez aucune propriété des couches dans drawRect et n'ajoutez aucun calque dans drawRect. La seule chose que vous devriez faire dans drawRect est dessin le contenu de la vue. Ce code:

override func drawRect(rect: CGRect) { 
    self.backgroundColor=UIColor.greenColor(); 
    self.layer.cornerRadius=5; 
} 

... est juste faux. Supprime-le.

+0

Merci d'avoir répondu et O.K je ne le ferai pas ... mais vous ne répondez pas vraiment à ma question ou à une bonne explication. si je ne devais pas le faire que pourquoi quand je supprime la fonction awakeFromNiv du code je peux voir que les propriétés de la couche du bouton dans drawRect func sont définies et fonctionnent et il n'y a pas d'erreur après l'exécution du code ?? –

+0

Je n'ai pas dit supprimer le 'awakeFromNib'. 'awakeFromNib' est un excellent endroit pour configurer votre vue avec des calques et des couleurs d'arrière-plan. 'drawRect' n'est pas. – matt