2012-03-14 4 views
0

IIには、3つのサブビュー、同じUIViewのすべてのインスタンスを水平に配置し、それぞれに灰色の背景を塗りつぶすUIViewがあります。私は最初のビューでは動作するようにしましたが、2番目のビューでは問題があります。ここでは、トリックを行うことになっているのdrawRectコードが...あるUIGraphicsGetCurrentContextを正しく使用する

- (void)drawRect:(CGRect)rect { 
     // grab current graphics context 
    CGContextRef g = UIGraphicsGetCurrentContext(); 

     // fill grey background 
    CGContextSetRGBFillColor(g, (207.0/255.0), (207.0/255.0), 211.0/255.0, 1.0); 
    CGContextFillRect(g, self.frame); 

} 

だから私は、その後、frame.origin.x = 0との最初のサブビューを作成し、私のメインビューに追加しています私のビューコントローラからframe.origin.xを最初の幅に設定して2番目を作成し、3番目に追加します。

最初のビューは正しく塗りつぶされますが、2番目と3番目のビューは、グレーの塗りつぶしが発生しなかったかのように黒い背景を持ちます。私は2番目と3番目のサブビューのコンテキストを適切に取得していないため、これが原因だと思われます。

これを行うには何が必要ですか?

ジョン

+0

これはあなたのUIViewサブクラスの 'drawRect'ですか? – FluffulousChimp

+0

はい、3回インスタンス化されました。 – user278859

答えて

3

それは幾何学の問題だ - boundsframeself.frameを記入することは望ましくありません。あなたのdrawRectは次のようになります:

- (void)drawRect:(CGRect)rect { 
    // grab current graphics context 
    CGContextRef g = UIGraphicsGetCurrentContext(); 

    // fill grey background 
    CGContextSetRGBFillColor(g, (207.0/255.0), (207.0/255.0), 211.0/255.0, 1.0); 
    CGContextFillRect(g, rect); 
} 
+0

うん。それはそれだった。顔の中で私を睨んでいる。本当にありがとう! – user278859