2014-07-24 1 views
2

Я здесь, и мне нужна помощь. Для целей тестирования у меня есть UIView, который я рисую через drawRect (код ниже). Я могу нарисовать круг с определенным углом и таким, но он заполнен и закрыт. Мне нужно, чтобы он был открытым и гладил. В настоящее время я использую UIBezierPath для этого, но есть ли лучший способ сделать это? Я могу нарисовать треугольник с открытым концом, как я хочу в UIBezierPath, но я не могу указать угол, который мне нужен (код ниже также). Любая помощь с этим будет высоко оценена. Благодарю.Как нарисовать треугольник с открытым концом с определенным углом в UIView?

На рисунке ниже показано, как я хочу, чтобы он выглядел, когда я рисую его под определенным углом.

enter image description here

#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 

и вот как я могу сделать это без определенного угла.

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