Я использую Quartz-2D для iPhone для отображения маршрута на карте. Маршрут окрашивается в соответствии с температурой. Поскольку некоторые улицы окрашены в желтый цвет, я использую слегка более толстую черную линию под линии маршрута, чтобы создать эффект границы, так что желтые части маршрута выделяются на желтых улицах. Но даже если черная линия будет такой же толстой, как линия маршрута, весь маршрут выглядит как червь (очень уродливый). Это было связано с тем, что я рисовал линии от waypoint до waypoint, вместо этого использовал последнюю путевую точку в качестве следующей стартовой путевой точки. Таким образом, если отсутствует пара путевых точек, маршрут по-прежнему не будет иметь разрезов.Рисунок iphone quartz 2 строки друг на друга вызывает эффект червя
Что мне нужно для отображения обеих линий без эффекта червя?
-(void) drawRect:(CGRect) rect
{
CSRouteAnnotation* routeAnnotation = (CSRouteAnnotation*)self.routeView.annotation;
// only draw our lines if we're not int he moddie of a transition and we
// acutally have some points to draw.
if(!self.hidden && nil != routeAnnotation.points && routeAnnotation.points.count > 0)
{
CGContextRef context = UIGraphicsGetCurrentContext();
Waypoint* fromWaypoint = [[Waypoint alloc] initWithDictionary:[routeAnnotation.points objectAtIndex:0]];
Waypoint* toWaypoint;
for(int idx = 1; idx < routeAnnotation.points.count; idx++)
{
toWaypoint = [[Waypoint alloc] initWithDictionary:[routeAnnotation.points objectAtIndex:idx]];
CLLocation* fromLocation = [fromWaypoint getLocation];
CGPoint fromPoint = [self.routeView.mapView convertCoordinate:fromLocation.coordinate toPointToView:self];
CLLocation* toLocation = [toWaypoint getLocation];
CGPoint toPoint = [self.routeView.mapView convertCoordinate:toLocation.coordinate toPointToView:self];
routeAnnotation.lineColor = [fromWaypoint.weather getTemperatureColor];
CGContextBeginPath(context);
CGContextSetLineWidth(context, 3.0);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextMoveToPoint(context, fromPoint.x, fromPoint.y);
CGContextAddLineToPoint(context, toPoint.x, toPoint.y);
CGContextStrokePath(context);
CGContextClosePath(context);
CGContextBeginPath(context);
CGContextSetLineWidth(context, 3.0);
CGContextSetStrokeColorWithColor(context, routeAnnotation.lineColor.CGColor);
CGContextMoveToPoint(context, fromPoint.x, fromPoint.y);
CGContextAddLineToPoint(context, toPoint.x, toPoint.y);
CGContextStrokePath(context);
CGContextClosePath(context);
fromWaypoint = toWaypoint;
}
[fromWaypoint release];
[toWaypoint release];
}
}
Кроме того, я получаю ошибку
<Error>: CGContextClosePath: no current point.
, который я думаю, это фигня.
Пожалуйста, подскажите мне! :)