2015-09-09 3 views
0

Я хочу передать массив цветов в drawRect в swift, как я могу это сделать? (Я получаю много ошибок ..)Передать переменные в drawRect в swift

class GradientColorView : UIView { 

    static let colors : NSArray = NSArray() 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    class func initWithColors(colors :NSArray) { 

    } 

    override func drawRect(rect: CGRect) { 

     println(self.colors) 
     println("drawRect has updated the view") 
    } 
} 

ответ

3

Ваш класс имеет цвет в качестве статической переменной, которая так же, как переменную класса, и он пусть это означает, что неизменен константа. Вам нужно будет изменить это, чтобы var, если вы хотите, чтобы он был модифицируемым. Таким образом, вы не можете получить доступ к этому из экземпляра. Я бы предложил вам изменить это на переменную экземпляра, что упростит выполнение вызова чертежа при изменении цвета.

Вы могли бы сделать что-то вроде этого,

class GradientColorView : UIView { 

    var colors : NSArray = NSArray() { 
     didSet { 
      setNeedsDisplay() 
     } 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
    } 

    class func initWithColors(colors :NSArray) { 

    } 

    override func drawRect(rect: CGRect) { 

     println(self.colors) 
     println("drawRect has updated the view") 
    } 
} 

Затем вы можете обновить цвета из экземпляра gradientView который будет перерисовывать его снова,

let gradientView = GradientColorView(frame: CGRectMake(0, 0, 200, 200)) 
gradientView.colors = [UIColor.redColor(), UIColor.orangeColor(), UIColor.purpleColor()] 
+0

Спасибо очень много людей, вы решили меня проблема, а также я узнал что-то новое! –