2013-02-21 40 views
5

Tôi có một số MKMapView có một vấn đề rất lạ và khó giải thích. Tôi có một số MKOverlay được lưu giữa các phiên bằng cách lưu các điểm của lớp phủ vào một tệp và tải lớp phủ trong viewDidLoad. Vì vậy, đây là vấn đề:MKOverlay phủ tất cả mọi thứ với các trường hợp lạ chỉ trên ios5?

bước

  1. tôi thêm một MKOverlay đến MKMapView
  2. Trên đường chạy trốn thứ hai hoặc thứ ba sau khi thêm MKOverlay đến tất cả mọi thứ đồ trên bản đồ được overlayed bởi một lớp phủ cùng màu như một màu tôi đã thêm vào. Mọi thứ trên bản đồ ngoại trừ chế độ xem của bản đồ mà bạn có thể xem khi lượt xem được tải.

những điều kỳ lạ khác:

  1. Vấn đề này chỉ xảy ra khi mapView.showsUserLocation được thiết lập để đúng
  2. Vấn đề này chỉ xảy ra trên iOS5. Mọi thứ hoạt động tốt trên iOS6.
  3. Nếu bạn thu nhỏ lớp phủ màu lại kích thước phần hiển thị của bản đồ để điền bản đồ ở cấp mới mà bạn đã thu nhỏ.

Anh chàng này đang gặp vấn đề tương tự, mặc dù giải pháp của anh ấy không hiệu quả đối với tôi.

Trouble with overlay using MKPolyline & MKPolylineView

Dưới đây là một số mã của tôi:

-(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; 
} 

Mã gọi khi tải xem, tôi đã đăng nhập tọa độ đang được bổ sung vào mảng polyline ngay trước khi chúng được thêm vào, và mọi thứ đều ổn và dandy!

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

Dưới đây là một bức tranh về những gì sẽ xảy ra khi lớp phủ xuất hiện và chảo dùng sang một bên trên bản đồ: Bất kỳ ý tưởng về vấn đề này là gì?

Trả lời

1

Bạn đang sử dụng dequeueReusableAnnotationViewWithIdentifier, nhưng bạn chỉ gán chú thích cho pinView nếu kết quả của dequeueReusableAnnotationViewWithIdentifier là không.

Là phương pháp mà thường sẽ trở lại một thể hiện MKPinAnnotationView hiện, điều này thay vì nên là:

MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
if (pin == nil) { 
    pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 
} else { 
    pin.annotation = annotation; 
} 
+0

Sự cố vẫn xảy ra .... – Shredder2794

+0

Hm, khi nào bạn tạo bản đồ và đường? Vì bạn đã nói điều đó chỉ xảy ra khi vị trí của người dùng được bật, hãy thử tạo bản đồ và các đường polylines trong khi xemWillAppear chế độ xem vùng chứa của bản đồ, sau đó đặt các bản đồ hiển thịTiểu sử của người dùng thành CÓ trong chế độ xemDidAppear. – poetmountain

+0

Công trình này hoạt động! Cảm ơn bạn rất nhiều! Bạn nên chỉnh sửa câu trả lời của mình để phù hợp với câu trả lời bạn đã đưa cho tôi trong các nhận xét này cho những người tương lai gặp sự cố này! – Shredder2794

0

này có thể là vấn đề: Khi MapView cố gắng truy cập vào xem cho vị trí hiện tại của người dùng, bạn đang đi qua của bạn chế độ xem tùy chỉnh.

Thử thêm điều này với triển khai hiện tại của bạn.

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

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

PS: Đây có thể không phải là vấn đề về chế độ xem lớp phủ.

Trân trọng.

+0

Sự cố vẫn xảy ra ... – Shredder2794