2012-06-06 2 views
0

CoreGraphics 및 CALayers를 사용하여 UIButton에 멋진 그래픽을 그리려하지만, 표시 할 하위 레이어에는 아무 것도 표시 할 수 없습니다.어떻게하면 UIButton의 하위 레이어에 그릴 수 있습니까?

코드는 (내가 NSLog에 중단 점 또는 출력을 설정할 수 있습니다) 호출되는
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context { 
    CGRect rectangleFrame = layer.bounds; 
    UIGraphicsPushContext(context); 
    UIBezierPath* rectanglePath = 
     [UIBezierPath bezierPathWithRect: rectangleFrame]; 
    [[UIColor redColor] setFill]; 
    [rectanglePath fill]; 
    UIGraphicsPopContext(); 
} 

:하지만,

- (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 그냥 이런 drawLayer: inContext:를 구현 : 여기에

내가 내 계층을 설정하는 방법 아무것도 표시되지 않습니다. 버튼 텍스트가 있거나없는 투명한 버튼 (기본 레이어로 표시) 만 있습니다.

하위 레이어에서 "그리기"를 변경해야하는 이유는 무엇입니까?

+1

서브 레이어의 '프레임'을 프레임이 아닌 버튼 레이어의 '경계'로 설정해야합니다. 비록 그것이 유일한 문제인지 확실하지 않습니다. – omz

+0

Doh .. :-)이 질문을 답으로 제출하여 +1/수락 할 수 있습니까? 일단 누군가가 그것을 지적하면 분명히! 다른 문제가 있으면 알려주세요! 감사. – Thorsten

답변

4
[customDrawn setFrame:buttonLayer.bounds]; 
관련 문제