如何在swift中改变控制器某些部分视图的颜色?

时间:2017-10-30 11:20:29

标签: ios swift uiview

我创建了一个自定义UIView。我正在使用下面的代码将其作为其他颜色的某些部分。

import Foundation

class BottomView:UIView {

    override func draw(_ rect: CGRect) {
        self.fillColor(with: .gray, width: 20)
    }

    func fillColor(with color:UIColor,width:CGFloat) {

        let topRect = CGRect(x:0, y:0, width : width, height: self.bounds.height);
        color.setFill()
        UIRectFill(topRect)

    }

}

现在我的视图中有一些初始部分颜色为灰色&其余的颜色是不同的。现在从控制器,如果我尝试将其颜色更改为绿色,它不会从开始位置更改。它的颜色在初始颜色后发生了变化。

请让我知道如何将背景颜色完全设置为绿色。

1 个答案:

答案 0 :(得分:2)

您可以在setNeedsDisplay上使用 bottom view ,并在设置backgroundColor时重新绘制。

  

<强> setNeedsDisplay()

     

将接收者的整个边界矩形标记为需要重绘。

     

您可以使用此方法或setNeedsDisplay(_ :)来通知   您需要重新绘制视图内容的系统。这种方法使   请求的注释并立即返回。视图不是   实际重绘直到下一个绘图周期,此时全部   无效的视图已更新。

示例:

<强> 1。 BottomView class

class BottomView:UIView
{
    var showGray = true

    override func draw(_ rect: CGRect)
    {
        if showGray
        {
            self.fillColor(with: .gray, width: 20)
        }
    }

    func fillColor(with color:UIColor,width:CGFloat)
    {
        let topRect = CGRect(x:0, y:0, width : width, height: self.bounds.height);
        color.setFill()
        UIRectFill(topRect)
    }
}

<强> 2。在UIViewController

self.bottomView.showGray = false
self.bottomView.setNeedsDisplay()
self.bottomView.backgroundColor = .green