Я использую Quartz-2D для iPhone, чтобы отобразить маршрут на карте. Маршрут окрашен в зависимости от температуры. Поскольку некоторые улицы окрашены в желтый цвет, я использую немного более толстую черную линию под линией маршрута, чтобы создать эффект границы, чтобы желтые части маршрута были заметны на желтых улицах. Но даже если черная линия такая же толстая, как и линия маршрута, весь маршрут выглядит как червь (очень уродливый). Я думал, что это потому, что я рисовал линии от путевой точки к путевой точке, вместо этого используя последнюю путевую точку в качестве следующей начальной путевой точки. Таким образом, если пропущена пара путевых точек, маршрут все равно не будет обрезан.
Что мне нужно сделать, чтобы обе строки отображались без эффекта червя?
-(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.
ошибка, которую я считаю ерундой.
Пожалуйста, подскажите мне! :)