MKMapView
説明するのが難しい非常に奇妙な問題を抱えていることがあります。MKOverlay
オーバーレイのポイントをファイルに保存し、にオーバーレイをロードすることで、セッション間で保存されるがありますviewDidLoad
。だからここに問題があります:
手順
- にを追加
MKOverlay
しますMKMapView
- マップにを追加した後の2回目または3回目の実行では
MKOverlay
、マップ上のすべてのものが、追加したものと同じ色のオーバーレイでオーバーレイされます。ビューがロードされたときに表示されるマップのビューを除く、マップ上のすべて。
その他の奇妙なこと:
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;
}
ビューが読み込まれるときに呼び出されるコード。ポリライン配列に追加される座標を、追加される直前にログに記録しました。すべてが正常でダンディです。
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];
これは、オーバーレイが表示され、ユーザーがマップの横にパンしたときに何が起こるかを示しています 。問題が何であるかについてのアイデアはありますか?