2010-09-14 34 views
7

Tôi cần một số mã có thể được sử dụng bên ngoài các chức năng mk *. Tôi cần chạy hàm tùy chỉnh của mình để đưa dấu đầu tiên và LAST vào một mảng ở phía trước. (trên đầu tất cả các điểm đánh dấu khác trên màn hình của tôi). Tôi đã thửiphone mapview mang chú thích đầu tiên và cuối cùng đến trước

[self.view bringSubviewToFront:[[mapView annotations]objectAtIndex: 0]]; 

Tôi đã sử dụng [[mapView annotations]objectAtIndex: 0] trong mã của tôi và hoạt động, nhưng nó bị treo khi tôi cố gắng đưa nó lên phía trước. Tôi đang truy cập lớp sai hay gì đó?

cảm ơn sự giúp đỡ nào.

Trả lời

10

Bạn đang mang những thứ sai về phía trước. Cụ thể, mảng annotations là một mảng các đối tượng tuân theo giao thức MKAnnotation (do đó loại id<MKAnnotation>) và chúng không phải là chế độ xem.

Thay vào đó, bạn nên nhận được cấu hình riêng cho các chú thích mà bạn muốn, và mang những vào phía trước:

id<MKAnnotation> annotation = [[mapView annotations] objectAtIndex:0]; 
MKAnnotationView* annotationView = [mapView viewForAnnotation:annotation]; 
if (annotationView != nil) { 
    [annotationView.superview bringSubviewToFront:annotationView]; 
} 

Tuy nhiên, bạn nên lưu ý một vài điều:

  1. annotationView thể là nil nếu chú thích ở một điểm ngoài màn hình hoặc nếu các chú thích chưa hoàn thành được thêm vào bản đồ. Tuy nhiên, nếu nó là nil, bạn có thể không quan tâm nếu một chú thích thậm chí không có trên màn hình ở phía trước hay không.
  2. Bạn cần gọi số bringSubviewToFront trên màn hình giám sát của annotationView chứ không phải trên self.view hoặc thậm chí mapView vì không phải ai trong số đó là người giám sát của annotationView.
+0

có ý nghĩa - cảm ơn bạn! Tôi không cần phải lo lắng về chú thích là nil như thu phóng trước đó để mã vùng đảm bảo rằng khi tôi gọi mã này, chúng sẽ hiển thị trên màn hình (ít nhất là một phần nhỏ - khi chúng được vẽ). Tôi sẽ cho mã vào ngày mai. Rất cám ơn bạn đã trả lời. –

+0

Gọi hàm quan trọng bringSubviewToFront trên chú thíchView.superview thay vì chú thíchView – Zee

+0

Bạn cũng có thể muốn thêm điều này nếu (! [L isKindOfClass: [MKUserLocation class]]) { –

1

này làm việc tốt hơn cho tôi:

thiết lập xem chú thích lớp của zPosition (annotationView.layer.zPosition) tại:

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    // if it's the user location, just return nil. 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 

    MKAnnotationView *returnedAnnotationView = nil; 
    returnedAnnotationView = [CUSTOMVIEW createViewAnnotationForMapView:self.mapView annotation:annotation]; 
    // SOME CUSTOM PROCESSING... 
    returnedAnnotationView.layer.zPosition = 3; 
    return returnedAnnotationView; 
} 

Lưu ý rằng tôi giả sử các zPosition mặc định là 0. Setting để 3 làm cho tất cả 3 dấu hiệu hiển thị trên đầu trang cho tôi.

Các vấn đề liên quan