0

何らかの理由で、MKMapViewロード時にビュー以外のすべてをカバーするオーバーレイが表示されることがあります。ビューが読み込まれた後、横にスクロールしてオーバーレイを表示できます。また、この問題は ios5 以下にのみ存在し、この問題は ios6 では発生しません。マップをズームインまたはズームアウトすると、オーバーレイされたマップの一部が新しいビューに合わせて調整されることがわかりました。たとえば、ズームアウトすると、マップのオーバーレイされていない部分が調整され、ビューの新しいサイズに合わせて大きくなりますが、横にスクロールすると、マップは引き続き viewForOverlay で定義された色ですべてオーバーレイされます。方法。理由はわかりませんが、しばらくの間これに取り組んできましたが、Google は何も発見しませんでした。これが私のコードの一部です:

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

    if([overlay class] == [MKPolyline class]){
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];

    int lineSize = [self.ud integerForKey:@"lineSize"];
    polylineView.lineWidth = lineSize;

    NSString *lineColor = [self.ud objectForKey:@"lineColor"];

    if([lineColor isEqualToString:@"Red"]){
        polylineView.strokeColor = [UIColor redColor];
    }else if([lineColor isEqualToString:@"Blue"]){
        polylineView.strokeColor = [UIColor blueColor];
    }else if ([lineColor isEqualToString:@"Orange"]){
        polylineView.strokeColor = [UIColor orangeColor];
    }else if([lineColor isEqualToString:@"Green"]){
        polylineView.strokeColor = [UIColor greenColor];
    }else if([lineColor isEqualToString:@"Black"]){
        polylineView.strokeColor = [UIColor blackColor];
    }
    return polylineView;
    }else{
        MKOverlayView *overlayToReturn = [[MKOverlayView alloc]initWithOverlay:overlay];
        return overlayToReturn;
    }
}

これは私が得るものです:

MKMapView

4

1 に答える 1

1

問題は、MKPolyline の作成またはおそらく lineSize 設定にあると思われます。このコードはここでうまく動作します:

#import <MapKit/MapKit.h>
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    MKMapView *map = [[MKMapView alloc] initWithFrame:self.view.bounds];
    map.delegate = self;
    [self.view addSubview:map];

    CLLocationCoordinate2D coords[] = { {42,-83}, {32, -84}, {45,-78}, {42,-83} };
    MKPolyline *overlay = [MKPolyline polylineWithCoordinates:coords count:4];
    [map addOverlay:overlay];
}

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

    if([overlay class] == [MKPolyline class]){
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];

    int lineSize = 2; //[self.ud integerForKey:@"lineSize"];
    polylineView.lineWidth = lineSize;

    NSString *lineColor = @"Red"; // [self.ud objectForKey:@"lineColor"];

    if([lineColor isEqualToString:@"Red"]){
        polylineView.strokeColor = [UIColor redColor];
    }else if([lineColor isEqualToString:@"Blue"]){
        polylineView.strokeColor = [UIColor blueColor];
    }else if ([lineColor isEqualToString:@"Orange"]){
        polylineView.strokeColor = [UIColor orangeColor];
    }else if([lineColor isEqualToString:@"Green"]){
        polylineView.strokeColor = [UIColor greenColor];
    }else if([lineColor isEqualToString:@"Black"]){
        polylineView.strokeColor = [UIColor blackColor];
    }
    return polylineView;
    }else{
        MKOverlayView *overlayToReturn = [[MKOverlayView alloc]initWithOverlay:overlay];
        return overlayToReturn;
    }
}

@end
于 2013-01-05T23:34:07.853 に答える