2014-10-17 2 views
0

디자인 앱을 만들려고합니다. 기능 중 하나를 사용하면 다양한 애셋에서 여러 유형의 맞춤 테두리를 미리 볼 수 있습니다.UIBezierPath 여러 줄의 너비가있는 경로

나는이 테두리를 UIBezierPath를 사용하여 그리려고합니다.

현재 시스템 지원 :

  1. 다양한 국경 반경 (아무것도 0 -> 다른 곳에서 계산 된 천장) 전체 테두리
  2. 다른 색상은

내가 시도하고를 구현하기 :

  1. 다른 경계선 너비가있는 기능.

각 패스를 다른 너비로 그려서이 작업을 수행 할 수 있어야한다고 생각하지만 경로에서 패스로 변경하는 방법을 알 수 없습니다. 누구든지 나를 도울 수 있습니까?

감사합니다.

Click top see the border script in action

+(void)setBorderOnView :(id)object withWidth:(float)width andBorders:(NSArray*)borders ofColor:(UIColor*)color andRadius:(float)radius andRadii:(NSArray*)radii 
{ 

UIView *objectView = object; 

// Add half a pixel to compensate for border stroke, which puts .5 pixels outside of view. 
float borderWidth = width+0.5; 

float topLeftRadius = radius; 
float topRightRadius = radius; 
float bottomRightRadius = radius; 
float bottomLeftRadius = radius; 

CAShapeLayer *roundedCornerLayer = [CAShapeLayer layer]; 
CAShapeLayer *cornerMaskLayer = [CAShapeLayer layer]; 


UIColor * borderColor = color; 
roundedCornerLayer.strokeColor = borderColor.CGColor; 

// Begin corner path 
UIBezierPath *roundedCorners = [UIBezierPath bezierPath]; 

[roundedCorners moveToPoint:CGPointMake(0, objectView.frame.size.height - bottomLeftRadius)]; 
[roundedCorners addLineToPoint:CGPointMake(0, 0 + topLeftRadius)]; 



if(topLeftRadius != 0){ 
    [roundedCorners addArcWithCenter:CGPointMake(topLeftRadius, topLeftRadius) 
          radius:radius 
         startAngle:DEGREES_TO_RADIANS(180) 
         endAngle:DEGREES_TO_RADIANS(270) 
         clockwise:YES]; 



} 


[roundedCorners addLineToPoint:CGPointMake(objectView.frame.size.width - topRightRadius, 0)]; 

if(topRightRadius != 0){ 
    [roundedCorners addArcWithCenter:CGPointMake(objectView.frame.size.width - topRightRadius, 0 + topRightRadius) 
          radius:radius 
         startAngle:DEGREES_TO_RADIANS(270) 
         endAngle:DEGREES_TO_RADIANS(360) 
         clockwise:YES]; 
} 

[roundedCorners addLineToPoint:CGPointMake(objectView.frame.size.width, objectView.frame.size.height - bottomRightRadius)]; 

if(bottomRightRadius != 0){ 
    [roundedCorners addArcWithCenter:CGPointMake(objectView.frame.size.width - bottomRightRadius, objectView.frame.size.height - bottomRightRadius) 
          radius:radius 
         startAngle:DEGREES_TO_RADIANS(0) 
         endAngle:DEGREES_TO_RADIANS(90) 
         clockwise:YES]; 
} 

[roundedCorners addLineToPoint:CGPointMake(0 + bottomLeftRadius, objectView.frame.size.height)]; 

if(bottomLeftRadius != 0){ 
    [roundedCorners addArcWithCenter:CGPointMake(0 + bottomLeftRadius, objectView.frame.size.height - bottomLeftRadius) 
          radius:radius 
         startAngle:DEGREES_TO_RADIANS(90) 
         endAngle:DEGREES_TO_RADIANS(180) 
         clockwise:YES]; 
} 


roundedCornerLayer.path = roundedCorners.CGPath; 
roundedCornerLayer.fillColor = [UIColor clearColor].CGColor; 
roundedCornerLayer.lineWidth = borderWidth; 

[cornerMaskLayer setPath:roundedCorners.CGPath]; 
objectView.layer.mask = cornerMaskLayer; 
[objectView.layer addSublayer:roundedCornerLayer]; 

}

답변

0

roundedCornerLayer.lineWidth = borderWidth; 경로의 폭을 설정한다. 동일한 경로에 다른 너비가 있거나 다른 너비에 다른 너비가 있어야하는지 잘 모르겠습니다.

한 경로에서 다른 너비를 원한다면 별도의 하위 경로로 나누어야하며 각각은 lineWidth이되어야합니다.

다른 경로를 사용하려면 메서드 호출시 width 값을 변경하십시오.
나는 무엇이 있 었는가?

+0

안녕하세요. 다시 연락해 주셔서 감사합니다. 가능한 경우 네면의 각기 다른 선 너비로이 작업을 수행하고 싶습니다. 하위 경로는 어떻게 작동합니까? – RTP33

+0

실제로 경로를 그리지 않고 하위 레이어로 추가하기 때문에 각면에 다른 경로를 만들어 레이어에 추가한다고 말하고 싶습니다. – Yariv

+0

하지만 마스크이기 때문에보기가 잘립니다. 모든 코드 샘플? – RTP33