我有一个MKMapView
有一个非常奇怪的问题,有点难以解释。
通过将叠加层的点保存到文件并在MKOverlay
中加载叠加层,我在会话之间保存了viewDidLoad
。所以这就是问题所在:
步骤
MKOverlay
MKMapView
MKOverlay
添加到地图后的第二次或第三次运行
地图上的所有内容都会被相同颜色的叠加层覆盖
正如我所说的那样。除了地图外,地图上的所有内容
加载视图时可以看到的地图视图。其他奇怪的事情:
mapView.showsUserLocation
设置为时才会出现此问题
真iOS5
上。一切正常iOS6
。这家伙遇到同样的问题,虽然他的解决方案对我不起作用。
Trouble with overlay using MKPolyline & MKPolylineView
以下是我的一些代码:
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil; //switch this to MKAnnotationView and use .image property if pins need to be images
if(annotation == self.startingPin || annotation == self.endingPin){
static NSString *defaultPinID = @"com.MagnusDevelopment.pin";
pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pinView == nil)pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID];
pinView.canShowCallout = YES;
pinView.animatesDrop = TRUE;
if(annotation == self.startingPin){
//starting pin
pinView.pinColor = MKPinAnnotationColorGreen;
}else{
//ending pin
pinView.pinColor = MKPinAnnotationColorRed;
}
}
return pinView;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay];
aView.lineWidth = 7.0;
aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6];
return aView;
}
当视图加载时调用的代码,我已经记录了在添加到折线阵列之前添加到折线阵列的坐标,并且一切都很好而花花公子!
NSInteger numberOfSteps = pointsArray.count;
NSLog(@"number of steps: %i",numberOfSteps);
CLLocationCoordinate2D coordinates[numberOfSteps];
for (NSInteger index = 0; index < numberOfSteps; index++) {
CLLocation *location = [pointsArray objectAtIndex:index];
CLLocationCoordinate2D coordinate = location.coordinate;
coordinates[index] = coordinate;
}
MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps];
[self.mainMap addOverlay:polyLine];
以下是当叠加层出现并且用户平移到地图侧面时会发生什么情况的图片: 关于问题是什么的任何想法?
答案 0 :(得分:1)
您正在使用dequeueReusableAnnotationViewWithIdentifier,但如果dequeueReusableAnnotationViewWithIdentifier的结果为nil,您只需为pinView指定注释。
由于该方法通常会返回现有的MKPinAnnotationView实例,因此应该是:
MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pin == nil) {
pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];
} else {
pin.annotation = annotation;
}
答案 1 :(得分:0)
这可能是问题:当mapview尝试访问用户当前位置的视图时,您将传递自定义视图。
尝试在现有实施中添加此内容。
- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
return yourView;
}
PS:这可能不是叠加视图的问题。
最诚挚的问候。