CGPathMoveToPoint(thePath, NULL, lastDrawnPt.x, self.bounds.size.height); // bottom left
CGPathAddLineToPoint(thePath, NULL, lastDrawnPt.x, lastDrawnPt.y);
for (int i=0; i<(points.count-1); i++) {
//CGPoint pt1 = [[points objectAtIndex:i] CGPointValue];
CGPoint pt2 = [[points objectAtIndex:i+1] CGPointValue];
if (pt2.x > lastDrawnPt.x+2) {
// only draw if we've moved sunstantially to the right
//for the gradient
CGPathMoveToPoint(thePath, NULL, lastDrawnPt.x, lastDrawnPt.y);
CGPathAddLineToPoint(thePath, NULL, pt2.x, pt2.y);
lastDrawnPt = pt2;
}
}
//finish the gradient clipping path
CGPathMoveToPoint(thePath, NULL, lastDrawnPt.x, lastDrawnPt.y);
CGPathAddLineToPoint(thePath, NULL, lastDrawnPt.x, self.bounds.size.height); // bottom right
CGPathMoveToPoint(thePath, NULL, lastDrawnPt.x, self.bounds.size.height);
CGPathAddLineToPoint(thePath, NULL, firstDrawnPt.x, self.bounds.size.height); // bottom right
Это просто график серии отрезков.Для определенных значений точек это может выглядеть примерно так:
| |||| |
Он не отображает одну непрерывную фигуру.Таким образом, этот путь бесполезен для отсечения, поскольку он фактически пуст;как вы уже видели, отсечение к нему не приведет к тому, что в пути отсечения больше не будет рисунка.
Каждый lineto
, curveto
, arc
и т. д. работает с текущей точки.Вы устанавливаете, что изначально с moveto
, но каждый lineto
, curveto
, arc
и т. Д. Не очищает текущую точку, он обновляет это.Таким образом, чтобы создать одну фигуру, вы делаете одну moveto
, за которой следует последовательность lineto
(или curveto
или arc
), за которой в конечном итоге следует closepath
.
Говоря о closepath
…
CGPathCloseSubpath(thePath);
Это создает единственную замкнутую фигуру на пути, но так как эта фигура имеет нулевую область (будучи только отрезком линии, который удваивается), она все еще остаетсябесполезно для отсечения.
Я подозреваю, что все, что вам нужно сделать, это вырезать хотя бы один из сегментов moveto
(тот, что в цикле, если не тот, что после него).Затем вы можете упростить цикл - используйте быстрое перечисление в массиве вместо индексов и отключите отслеживание «последней нарисованной точки».
Кроме того, правильный тип для индексов в NSArray:NSUInteger
, а не int
.Следите за тем, чтобы ваши типы соответствовали друг другу - это поможет избежать боли в будущем.