2012-08-26 7 views
0

아래 코드는 어두운 테두리가있는 작은 회색 직사각형을 만듭니다. 모퉁이 라디오가 작동하지 않고 왜 마스크 대상을 적용했는지 알 수 없지만 전체 객체를 숨 깁니다 ...CAShapeLayer cornerRadius가 UIBezierPath에서 작동하지 않습니다.

어떻게해야합니까? 감사합니다

CGRect r = CGRectMake(conX, conY, 220, 50); 
    UIBezierPath* conPath = [UIBezierPath bezierPathWithRect:r]; 
    CAShapeLayer* conLayer = [CAShapeLayer layer]; 
    conLayer.path = conPath.CGPath; 
    conLayer.cornerRadius = 5.0; 
    UIColor *bg = [UIColor colorWithWhite:1 alpha:0.7]; 
    [conLayer setFillColor:bg.CGColor]; 
    [conLayer setStrokeColor:[UIColor grayColor].CGColor]; 
    [[self layer] addSublayer:conLayer]; 

답변

6

UPDATE :

당신은 단순히 라운드 RECT 경로를 내가 대신 라운드 RECT 경로를 사용하는 것이 좋습니다


을 만들 UIBezierPath(roundedRect: CGRect, cornerRadius: CGFloat).CGPath를 사용할 수 있습니다

CGRect r = { .size = { 220.0f, 50.0f } } ; 

CAShapeLayer * layer = [ CAShapeLayer layer ] ; 
layer.path = CGPathCreateRoundRect(r, 5.0f) ; 

CGPathCreateRoundRect()

CGPathRef CGPathCreateRoundRect(const CGRect r, const CGFloat cornerRadius) 
{ 
    CGMutablePathRef p = CGPathCreateMutable() ; 

    CGPathMoveToPoint(p, NULL, r.origin.x + cornerRadius, r.origin.y) ; 

    CGFloat maxX = CGRectGetMaxX(r) ; 
    CGFloat maxY = CGRectGetMaxY(r) ; 

    CGPathAddArcToPoint(p, NULL, maxX, r.origin.y, maxX, r.origin.y + cornerRadius, cornerRadius) ; 
    CGPathAddArcToPoint(p, NULL, maxX, maxY, maxX - cornerRadius, maxY, cornerRadius) ; 

    CGPathAddArcToPoint(p, NULL, r.origin.x, maxY, r.origin.x, maxY - cornerRadius, cornerRadius) ; 
    CGPathAddArcToPoint(p, NULL, r.origin.x, r.origin.y, r.origin.x + cornerRadius, r.origin.y, cornerRadius) ; 

    return p ; 
} 
+0

원하는 마스킹 효과 인 경우 레이어의 __mask__ 속성을 둥근 rect 경로가있는 모양 레이어로 설정하십시오. – nielsbot

+0

감사합니다. Niels는 멋진 친구입니다! :디) – Baconbeastnz

관련 문제