2015-09-15 2 views
0

Обучение использованию пути UIBezierPath. Я могу нарисовать простую строку в моем UIView, но происхождение всегда равно 0,0. Что мне не хватает?CGMutablePath всегда начинается с 0,0

Простой код:

CGMutablePathRef cgPath = CGPathCreateMutable(); 

UIBezierPath *aPath = [UIBezierPath bezierPath]; 

CGPathMoveToPoint(cgPath, NULL, 100, 100); 
CGPathAddLineToPoint(cgPath, NULL, 200,200); 

aPath.CGPath = cgPath; 
aPath.usesEvenOddFillRule = YES; 

CAShapeLayer *lines = [CAShapeLayer layer]; 
lines.path = aPath.CGPath; 
lines.bounds = CGPathGetBoundingBox(lines.path); 
lines.strokeColor = [UIColor whiteColor].CGColor; 
lines.fillColor = [UIColor clearColor].CGColor; /*if you just want lines*/ 
lines.lineWidth = 3; 

[self.UIView.layer addSublayer:lines]; 

CGPathRelease(cgPath); 

Я поставил свою начальную точку слишком 100100 и нарисуйте линию на 200,200. Но он всегда начинается где-то около 0,0.

ОБНОВЛЕННЫЙ КОД - Но я все еще смешиваю между UIBezierPath и CGPath?

static CGFloat thickness = 0.5; 
static CGFloat shapeSizex = 300; 
static CGFloat shapeSizey = 150; 
static CGFloat xanchor = 20; // bottom-left corner x 
static CGFloat yanchor = 180; // bottom-left corner y 

UIBezierPath *axisPath = [UIBezierPath bezierPath]; 
[axisPath moveToPoint:CGPointMake(xanchor, yanchor-shapeSizey)]; 
[axisPath addLineToPoint:CGPointMake(xanchor, yanchor)]; 
[axisPath addLineToPoint:CGPointMake(xanchor+shapeSizex, yanchor)]; 

CAShapeLayer *lines = [CAShapeLayer layer]; 
lines.path = axisPath.CGPath; 
lines.strokeColor = [UIColor whiteColor].CGColor; 
lines.lineWidth = thickness; 

[self.ChartViewOutlet.layer addSublayer:lines]; 

Он делает то, что я хотел, чтобы нарисовать ось графика.

+0

Любая конкретная причина, по которой вы используете 'CGPath' здесь? 'UIBezierPath' имеет на нем методы делать то же самое, не создавая отдельный объект. (В качестве альтернативы вы могли бы выполнить всю работу с CGPath, так как вам это нужно позже, вам определенно не нужны оба. Просто установите правило заполнения на CAShapeLayer, вот где оно будет, если вам это нужно, но это не так, t имеет смысл, так как вы все равно не заполняете.) –

+0

Я обновил код, он работает, но я все еще смешиваю CGPath и UIBezierPath? – user5308141

+0

Ваш обновленный код выглядит отлично. Вы используете 'UIBezierPath' и' CGPath' правильными способами. Я вижу, что вы удалили «границы». У вас все еще есть проблемы? –

ответ

0

Ваша проблема здесь:

lines.bounds = CGPathGetBoundingBox(lines.path); 

Вы пересматривал слой, чтобы обернуть вокруг пути. Поэтому, когда вы рисуете его, он преобразуется, чтобы поместить центр рисованной дорожки в центр слоя.

Смежные вопросы