2012-06-06 97 views
0

我想用CoreGraphics和CALayers在UIButton上繪製一些花哨的圖形,但是我無法獲取任何要顯示的子圖層。如何在UIButton的底層上繪圖?

下面是我如何設置我的子層:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     // Initialization code 
     CALayer *buttonLayer = self.layer; 
     buttonLayer.masksToBounds = YES; 
     buttonLayer.backgroundColor = [[UIColor clearColor] CGColor]; 
     self.myDelegate = [[PlayerButtonLayerDelegate alloc] init]; 

     CALayer *customDrawn = [CALayer layer]; 
     customDrawn.delegate = self.myDelegate; 
     customDrawn.frame = buttonLayer.frame; 
     customDrawn.masksToBounds = YES; 
     [buttonLayer insertSublayer:customDrawn atIndex:0]; 
     [customDrawn setNeedsDisplay]; 
    } 
    return self; 
} 

PlayerButtonLayerDelegate只是實現​​這樣的:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context { 
    CGRect rectangleFrame = layer.bounds; 
    UIGraphicsPushContext(context); 
    UIBezierPath* rectanglePath = 
     [UIBezierPath bezierPathWithRect: rectangleFrame]; 
    [[UIColor redColor] setFill]; 
    [rectanglePath fill]; 
    UIGraphicsPopContext(); 
} 

的代碼被稱爲(我可以設置斷點或輸出的NSLog),但沒有任何顯示:我只是有一個透明的按鈕(如主層所示),有和沒有任何按鈕文本。

我必須更改爲「繪製」子圖層上的什麼?

+1

您應該將子圖層的「frame」設置爲按鈕圖層的「bounds」,而不是其框架。不知道這是否是唯一的問題。 – omz

+0

Do .. :-)你可以提交這個答案,以便我能+ 1 /接受它嗎?很明顯,一旦有人指出!請讓我知道是否還有其他問題!謝謝。 – Thorsten

回答

4
[customDrawn setFrame:buttonLayer.bounds];