2015-02-08 34 views
1

我想用drawRect來畫一個綠色圓圈,但我在綠色圓圈周圍的矩形區域中得到一個黑色背景。客觀C - 不需要的黑色背景在圓圈後面

我需要邊界矩形的填充是透明的。

這裏我DrawCircle類:

- (void)drawRect:(CGRect)rect { 
    UIBezierPath *ballBezierPath = [UIBezierPath rect]; 
    [[UIColor greenColor] setFill]; 
    [ballBezierPath stroke]; 

    self.opaque = NO; 
    self.backgroundColor = [UIColor clearColor]; 
} 

我的研究表明,添加最後兩行設置opaquebackgroundColor會解決這個問題,但它仍然無法正常工作。

這裏就是我加入我的ViewControllerviewDidLoad法副視點:

CGRect positionFrame = CGRectMake(160,160,200,200); 
DrawCircle *drawBallView = [[DrawCircle alloc] initWithFrame:positionFrame]; 
[view1 addSubview:drawBallView]; 

有我錯過了一些東西還是有不同的方法,我可以走?

回答

0

沒有與當前的做法有幾個問題:

  • 屬性設置爲時已晚,你實際上是畫
  • 後要設置在現在每次抽獎的性質,他們只需要設置一次
  • 更改屬性可能會觸發重繪,並且最終會重複進行重繪
  • 如果沒有超級調用,則覆蓋drawRect:。爲了使backgroundColor能夠用自己的顏色填充矩形,或者讓超類來完成。

將您的視圖配置移動到初始值設定項,drawRect不是一件好事。實施initWithFrameinitWithCoder(以支持Interface Builder。

- (id) initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setupView]; 
    } 
    return self; 
} 

- (id) initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self setupView]; 
    } 
    return self; 
} 

- (void) setupView { 
    self.opaque = NO; 
    self.backgroundColor = [UIColor clearColor]; 
}