2017-10-30 6 views
1

カスタム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) 

    } 

} 

今、私の見解では、色のいくつかの最初の部分を持っています。今コントローラーから色を緑に変えようとすると、開始位置から変更されません。それは、元の色の後に変更された色です。

背景色を緑色に設定する方法を教えてください。

答えて

2

あなたbottom viewsetNeedsDisplayを使用してbackgroundColorを設定するとき、それを再描画することができます。

setNeedsDisplay()

再描画される必要として受信機の全体の境界矩形をマーク。

このメソッドまたはsetNeedsDisplay(_ :)を使用して、 システムに、ビューの内容を再描画する必要があることを通知できます。このメソッドは、要求のメモを にしてすぐに戻ります。ビューは、次の描画サイクルまで 実際に再描画されません。その時点で、無効化されたビューはすべて更新されます。

例:あなたのUIViewController

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

1. BottomViewclass

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

関連する問題