2013-02-21 7 views
5

私はMKMapViewを持っていますが、これは非常に奇妙な問題です。説明するのは難しいです。 オーバーレイのポイントをファイルに保存し、オーバレイをviewDidLoadにロードすることによってセッション間で保存されるMKOverlayがあります。そこでここでは問題があります:MKOverlayはios5でのみ奇妙な状況のすべてをオーバーレイしますか?

ステップ

  1. 私は、地図上の すべてがのオーバーレイによってオーバーレイますマップにMKOverlayを追加した後、第2または3回目でMKMapView
  2. MKOverlayを追加します私が追加したのと同じ色の です。地図上のすべてのものは、ビューがロードされたときに表示されるマップの ビューを除いて表示されます。

その他の奇妙な:

  1. この問題だけmapView.showsUserLocationがtrue
  2. に設定されている場合、この問題がのみiOS5で発生発生します。 iOS6ですべて正常に動作します。
  3. 色付きオーバーレイを縮小すると、表示されている部分の幅が になります。ズームアウトした新しいレベルで地図を塗りつぶします。

この男は同じ問題を抱えていますが、彼の解決策は私のためには機能しませんでした。ここで

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]; 

は、オーバーレイが表示され、マップ上の側へのユーザーパンときに何が起こるかの写真ですか?

答えて

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; 
} 
+0

問題はまだ発生しています.... – Shredder2794

+0

地図、ラインを作成していますか?ユーザーの場所がオンになっている場合にのみ表示されるので、マップのコンテナビューのviewWillAppear中にマップとポリラインを作成してから、viewDidAppear中にマップのshowsUserLocationをYESに設定してみてください。 – poetmountain

+0

これは動作します!どうもありがとうございます!この問題を抱える将来の人々のために、これらのコメントに私が与えた答えに合わせて、あなたの答えを編集する必要があります。 – Shredder2794

0

これは問題かもしれません:MapViewのは、ユーザーの現在の場所のためのビューにアクセスしようとすると、あなたが渡しているあなたカスタマイズされたビュー。

既存の実装でこれを追加してください。

- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id) annotation 
{ 

if ([annotation isKindOfClass:[MKUserLocation class]]) { 
    return nil;  
} 
return yourView; 
} 

PS:これはオーバーレイビューの問題ではない可能性があります。

よろしくお願いいたします。

+0

問題はまだ発生しています... – Shredder2794