无法更改视图中绘制的圆的颜色

我试图通过在类中创建一个方法来更新我在UIView的子类中创建的圆的颜色,以更新颜色,但颜色不会改变。

 import UIKit class badge: UIView { struct mine { static var p = UIBezierPath(ovalInRect: CGRectMake(0,0,100,100)) } override func drawRect(rect: CGRect) { // Drawing code UIColor.blueColor().setFill() mine.p.fill() } func colour(whatColour: String) { UIColor.redColor().setFill() mine.p.fill() self.setNeedsDisplay() } } // The above is referenced in view controller with @IBOutlet weak var myBadge: badge! // change function colour is called with myBadge.colour() // but the colour of the circle does not change (its still filled in blue) } 

我究竟做错了什么?

更新:Swift 3(和Swift 4)语法

setNeedsDisplay使draw再次运行,并将填充颜色设置为蓝色。 尝试在Badge视图中添加属性以存储desiredColour

 class Badge: UIView { var desiredColour: UIColor = .blue struct mine { static var p = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100)) } override func draw(_ rect: CGRect) { // Drawing code desiredColour.setFill() mine.p.fill() } func colour() { desiredColour = .red self.setNeedsDisplay() } } 

如果你将didSet添加到desiredColour ,你可以让它为你调用setNeedsDisplay ,然后你甚至不需要colour函数。 所以要使用它,你只需调用myBadge.desiredColour = .red ,视图就会重绘!

 class Badge: UIView { var desiredColour: UIColor = .blue { didSet { self.setNeedsDisplay() } } struct mine { static var p = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100)) } override func draw(_ rect: CGRect) { // Drawing code desiredColour.setFill() mine.p.fill() } } 

它在Swift Playground中运行:

游乐场中的徽章示例