2014-07-24 9 views
2

나는 여기에서 난처한 상황에 처해있어 도움이 필요하다. 테스트 목적으로 drawRect (아래 코드)를 통해 UIView를 그립니다. 특정 각도로 원을 그릴 수 있지만 채워지고 닫힙니다. 나는 그것이 열려 있고 쓰다듬어 야 할 필요가있다. 저는 현재 UIBezierPath를 사용하고 있지만 이것을 수행하는 더 좋은 방법이 있습니까? 내가 UIBezierPath에서 원하는 것처럼 열린 열린 삼각형을 그릴 수는 있지만 꼭 필요한 각도를 지정할 수는 없습니다 (아래 코드 참조). 이것에 대한 어떤 도움이라도 대단히 감사 할 것입니다. 감사.UIView에서 특정 각도로 열린 끝이 잘린 삼각형을 그리는 방법은 무엇입니까?

아래 그림은 특정 각도로 그릴 때의 모습입니다. 여기

#import "AngleView.h" 
#define DEGREES_TO_RADIANS(degrees) ((M_PI * degrees)/ 180) 
@implementation AngleView 

-(void)drawRect:(CGRect)rect { 

UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointZero 
                radius:50 
               startAngle:0 
                endAngle:DEGREES_TO_RADIANS(45) 
                clockwise:NO]; 

[aPath fill]; 
} 

@end 

enter image description here

와 내가 특정 각도없이 그릴 수있는 방법이다.

UIBezierPath* bezierPath = [UIBezierPath bezierPath]; 
[bezierPath moveToPoint: CGPointMake(86.5, 33.5)]; 
[bezierPath addLineToPoint: CGPointMake(60.5, 62.5)]; 
[bezierPath addLineToPoint: CGPointMake(87.5, 62.5)]; 
[[UIColor blackColor] setStroke]; 
bezierPath.lineWidth = 1; 
[bezierPath stroke]; 
+1

두 줄의 별도 라인을 그렸다고 생각하십니까? –

+0

네, 처음부터 그렇게 생각한 것입니다. 그러나 그 생각을 버리는 것은 잘못된 길임을 알았지 만 그게 내가 어떻게해야하는지 생각합니다. 그러나 각도의 모서리가 연결되지 않고 날카 로워 보이지 않게 할 수 있습니까? 감사. – 0SX

답변

1

한 줄을 그리는 대신 두 지점을 같은 지점에서 시작하여 그 중 하나에 각도를 부여 할 수 있습니다.

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    CGContextTranslateCTM(context, 0, 119.5); //here you can set originating point of line 
    CGContextRotateCTM(context, -45 * M_PI/180); //Change Angle here -45 
    UIBezierPath* bezierPath = UIBezierPath.bezierPath; 
    [bezierPath moveToPoint: CGPointMake(0, 0)]; 
    [bezierPath addCurveToPoint: CGPointMake(39, 0) controlPoint1: CGPointMake(39, 0) controlPoint2: CGPointMake(39, 0)]; 
    [UIColor.blackColor setStroke]; 
    bezierPath.lineWidth = 1; 
    [bezierPath stroke]; 
    CGContextRestoreGState(context); 

    //Second UIBezierPath with 0 angle 
    context = UIGraphicsGetCurrentContext(); 
    UIBezierPath* bezier2Path = UIBezierPath.bezierPath; 
    [bezier2Path moveToPoint: CGPointMake(0, 119.5)]; 
    [bezier2Path addCurveToPoint: CGPointMake(38.5, 119.5) controlPoint1: CGPointMake(38.5, 119.5) controlPoint2: CGPointMake(38.5, 119.5)]; 
    [UIColor.blackColor setStroke]; 
    bezier2Path.lineWidth = 1; 
    [bezier2Path stroke]; 
    CGContextRestoreGState(context); 
} 
+0

그래서 코드에서 볼 수 없기 때문에 기준선을 올바르게 그려야합니다. 정말 고마워! – 0SX

+0

예 코드는 단지 -45 각도의 선을 그립니다. 동일한 코드를 반복하여 0 각도의 두 번째 선을 그릴 수 있습니다. – mohacs

+0

감사합니다. mohacs! 나는 항상 새로운 것을 배우고 있습니다. 나는 당신의 코드가 비슷한 질문을하는 사람들을 도울 것이라고 확신한다. – 0SX