2014-09-12 4 views
0

UIBezierPath을 사용하여 직육면체 모양을 그리려합니다. 내 그리기 코드는 다음과 같습니다 :베 지어 경로에서 선의 연결을 부드럽게하는 방법은 무엇입니까?

나는 모든에 대해 서로 다른 알파 값을 원했기 때문에 3 개 경로를 생성

UIBezierPath *bpath1 = [UIBezierPath bezierPath]; 
[bpath1 moveToPoint:CGPointMake(x, y + h * 0.4)]; 
[bpath1 addLineToPoint:CGPointMake(x, y + h)]; 
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)]; 
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4)]; 
[bpath1 closePath]; 


UIBezierPath *bpath2 = [UIBezierPath bezierPath]; 
[bpath2 moveToPoint:CGPointMake(x + w * 0.4, y)]; 
[bpath2 addLineToPoint:CGPointMake(x + w, y)]; 
[bpath2 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4]; 
[bpath2 addLineToPoint:CGPointMake(x, y + h * 0.4]; 
[bpath2 closePath]; 

UIBezierPath *bpath3 = [UIBezierPath bezierPath]; 
[bpath3 moveToPoint:CGPointMake(x + w, y)]; 
[bpath3 addLineToPoint:CGPointMake(x + w, y + h - (h * 0.4))]; 
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)]; 
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4]; 
[bpath3 closePath]; 

((X는, y)는, w)의 크기가 내 UIView 및 (시간의 기원) 통로. 나는 아래입니다 원하는 출력을 가지고 :

General output

하지만, 아래와 같은 모양을 가지고 h (높이)의 매우 적은 값 놀랍게도

:

Strange shape for some <code>h</code> values

자, 이 모양이 나타나는 값의 수는 거의 없습니다. 매번 렌더링 코드가 동일하므로 베 지어 패스의 이상한 동작을 이해하지 못합니다. 왜 베 지어 경로가이 동작을 보여 주며 이러한 관절을 부드럽게하는 방법이 있습니까?

답변

0

당신이 UIView의에 그리는 경우 다음 아담의 솔루션은 작동과 같은 솔루션을 가지고 있다고 생각합니다. 그러나 (내 경우처럼) CaShapeLayer을 그리는 경우 경로가 아닌 shapeLayerlineJoin 속성을 설정해야합니다. 이 솔루션은 here으로 설명되어 있습니다.

2

lineCapStylelineJoinStyle을 살펴보십시오. 특히, lineJoinStyle이 Mitre를 기본값으로 지정하고 라운드로 변경하거나 miterLimit을 변경했기 때문에 더 많은 것으로 생각됩니다.

나는이 UIBezierPath not drawing a smooth curve

+0

그래서 miterLimit 값을 계산하는 방법은 무엇입니까? 입력 한 링크에 값을 -10으로 설정하면 문제가 해결되지 않습니다. – blancos