Проблема с наложением с использованием MKPolyline & MKPolylineView - PullRequest
2 голосов
/ 10 февраля 2012

Я добавил оверлей к своему MKMapView, используя метод addOverlay :.Наложение было сделано с использованием MKPolyline и обводка с использованием MKPolylineView.Цвет обводки синий, значение альфа-канала равно 0,7.

. При первоначальной загрузке вида наложение отображается правильно, но прилегающие области наложения также синие ... Когда я сжимаю и уменьшаю изображение, синяя область все еще там, но она подстраивается под мой новый уровень масштабирования.Это довольно сложно описать ... но в основном у меня есть маленький прямоугольник "карты нормалей", заключенный в большой синий прямоугольник.

Он исчезнет, ​​когда я уменьшу масштаб, чтобы увидеть всю страну и когдаЯ возвращаюсь назад, все нормально.

Я думаю, это может быть вызвано тем, что я неправильно внедрил MKOverlayProtocol?

Если у кого-то есть какие-либо идеи, пожалуйста, выскажите их мне ...

EDIT:

Вот код, который создает MKPolyline и метод делегата.

-(MKPolyline *)bluePolyline
{
    CLLocationCoordinate2D bluePoints[16];
    bluePoints[0] = CLLocationCoordinate2DMake(27.526483, -97.882454);
    bluePoints[1] = CLLocationCoordinate2DMake(27.526407, -97.887883);
    bluePoints[2] = CLLocationCoordinate2DMake(27.527244, -97.887905);
    bluePoints[3] = CLLocationCoordinate2DMake(27.527282, -97.887304);
    bluePoints[4] = CLLocationCoordinate2DMake(27.527577, -97.887304);
    bluePoints[5] = CLLocationCoordinate2DMake(27.527596, -97.885727);
    bluePoints[6] = CLLocationCoordinate2DMake(27.530194, -97.88577); //Seale St. &      Corrale Ave.
    bluePoints[7] = CLLocationCoordinate2DMake(27.530213, -97.883892); //Retama & Corral Ave.
    bluePoints[8] = CLLocationCoordinate2DMake(27.530279,-97.881907);
    bluePoints[9] = CLLocationCoordinate2DMake(27.530337,-97.880201);
    bluePoints[10] = CLLocationCoordinate2DMake(27.530356,-97.877959);
    bluePoints[11] = CLLocationCoordinate2DMake(27.52753,-97.877884); //West C Ave. & Armstrong
    bluePoints[12] = CLLocationCoordinate2DMake(27.527492,-97.878367); 
    bluePoints[13] = CLLocationCoordinate2DMake(27.527397,-97.878817);
    bluePoints[14] = CLLocationCoordinate2DMake(27.527349,-97.882454);
    bluePoints[15] = CLLocationCoordinate2DMake(27.526483, -97.882453);

    if(bluePolyline == nil)
    {
        bluePolyline = [MKPolyline polylineWithCoordinates:bluePoints count:16];
    }
    bluePolyline.title = @"Blue Route";
    _bluePolyline = bluePolyline;
    return _bluePolyline;
}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay];

//aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6];

aView.lineWidth = 10;

return aView;
}

1 Ответ

0 голосов
/ 20 февраля 2013

Я решил проблему, реализовав метод протокола MKOverlay:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay; 

примерно так:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay];

    if(overlay.title == @"Blue Route")
    {
        aView.lineWidth = 7.0;
        aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6];
    }
    if(overlay.title == @"Gold Route-A")
    {
        aView.lineWidth = 10.0;
        aView.strokeColor = [[UIColor yellowColor] colorWithAlphaComponent:0.6];
    }
    if(overlay.title == @"Gold Route-B")
    {
        aView.lineWidth = 7.0;
        aView.strokeColor = [[UIColor yellowColor] colorWithAlphaComponent:0.6];
    }
    return aView;

}

Где каждый оверлей былсозданный в другом месте в моей модели.

...