Iphone 加载时,MKMapView是否覆盖除视图之外的所有内容?仅限iOS5<;

Iphone 加载时,MKMapView是否覆盖除视图之外的所有内容?仅限iOS5<;,iphone,ios,ipad,mkmapview,mkoverlay,Iphone,Ios,Ipad,Mkmapview,Mkoverlay,由于某些原因,我的MKMapView有时会得到一个覆盖,在加载时覆盖除视图之外的所有内容。您可以在视图加载后滚动到一侧并查看覆盖。此外,此问题仅存在于ios5及以下版本中,而在ios6中不会出现此问题。我发现,如果放大或缩小地图,地图的覆盖部分将调整到新视图。例如,如果缩小,则地图的非覆盖部分将调整并变大,以适应视图的新大小,但如果随后侧向滚动,则地图仍以viewForOverlay方法中定义的颜色覆盖。我不知道为什么,我已经为此工作了一段时间,而谷歌没有发现任何东西。以下是我的一些代码: -(

由于某些原因,我的
MKMapView
有时会得到一个覆盖,在加载时覆盖除视图之外的所有内容。您可以在视图加载后滚动到一侧并查看覆盖。此外,此问题仅存在于ios5及以下版本中,而在ios6中不会出现此问题。我发现,如果放大或缩小地图,地图的覆盖部分将调整到新视图。例如,如果缩小,则地图的非覆盖部分将调整并变大,以适应视图的新大小,但如果随后侧向滚动,则地图仍以viewForOverlay方法中定义的颜色覆盖。我不知道为什么,我已经为此工作了一段时间,而谷歌没有发现任何东西。以下是我的一些代码:

-(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;
    }
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖{
如果([overlay class]==[MKPolyline class]){
MKPolylineView*polylineView=[[MKPolylineView alloc]initWithPolyline:overlay];
int lineSize=[self.ud integerworkey:@“lineSize”];
polylineView.lineWidth=线宽;
NSString*lineColor=[self.ud objectForKey:@“lineColor”];
如果([lineColor IsequalString:@“Red”]){
polylineView.strokeColor=[UIColor redColor];
}else if([lineColor IsequalString:@“Blue”]){
polylineView.strokeColor=[UIColor blueColor];
}else if([lineColor IsequalString:@“Orange”]){
polylineView.strokeColor=[UIColor orangeColor];
}else if([lineColor IsequalString:@“Green”]){
polylineView.strokeColor=[UIColor greenColor];
}else if([lineColor IsequalString:@“Black”]){
polylineView.strokeColor=[UIColor blackColor];
}
返回多段线视图;
}否则{
MKOverlayView*overlayToReturn=[[MKOverlayView alloc]initWithOverlay:overlay];
回归与回归;
}
}
这就是我得到的:


我怀疑问题在于您创建的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
#导入
#导入“ViewController.h”
@实现视图控制器
-(无效)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];
[地图添加覆盖:覆盖];
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖{
如果([overlay class]==[MKPolyline class]){
MKPolylineView*polylineView=[[MKPolylineView alloc]initWithPolyline:overlay];
int lineSize=2;/[self.ud integerworkey:@“lineSize”];
polylineView.lineWidth=线宽;
NSString*lineColor=@“红色”/[self.ud objectForKey:@“lineColor”];
如果([lineColor IsequalString:@“Red”]){
polylineView.strokeColor=[UIColor redColor];
}else if([lineColor IsequalString:@“Blue”]){
polylineView.strokeColor=[UIColor blueColor];
}else if([lineColor IsequalString:@“Orange”]){
polylineView.strokeColor=[UIColor orangeColor];
}else if([lineColor IsequalString:@“Green”]){
polylineView.strokeColor=[UIColor greenColor];
}else if([lineColor IsequalString:@“Black”]){
polylineView.strokeColor=[UIColor blackColor];
}
返回多段线视图;
}否则{
MKOverlayView*overlayToReturn=[[MKOverlayView alloc]initWithOverlay:overlay];
回归与回归;
}
}
@结束