Shr*_*794 5 iphone mkmapview mkannotation ios mkoverlay
我有一个MKMapView非常奇怪的问题很难解释.MKOverlay通过将叠加点保存到文件并加载叠加层,我在会话之间保存了一个viewDidLoad.所以这就是问题所在:
脚步
MKOverlay到MKMapViewMKOverlay到地图后的第二次或第三次运行中,地图上的所有内容都会覆盖与我添加的颜色相同的叠加层.地图上的所有内容,除了在加载视图时可以看到的地图视图.其他奇怪的事情:
mapView.showsUserLocation设置为true 时才会出现此问题iOS5.一切正常iOS6.这家伙有同样的问题,虽然他的解决方案对我不起作用.
使用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;
}
Run Code Online (Sandbox Code Playgroud)
在视图加载时调用的代码,我已经记录了在添加到折线阵列之前添加到折线阵列的坐标,一切都很好,花花公子!
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];
Run Code Online (Sandbox Code Playgroud)
下面是当叠加层出现并且用户平移到地图侧面时会发生什么情况的图片:
关于问题是什么的任何想法?
您正在使用 dequeueReusableAnnotationViewWithIdentifier,但仅当 dequeueReusableAnnotationViewWithIdentifier 的结果为零时,您才将注释分配给 pinView。
由于该方法通常会返回现有的 MKPinAnnotationView 实例,因此应该是:
MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pin == nil) {
pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];
} else {
pin.annotation = annotation;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |