2012-11-28 31 views
7

Như tôi muốn thực hiện các tùy chỉnh gọi ra trong mkmapview tôi đang sử dụng các lớp này CalloutMapAnnotationView.h và CalloutMapAnnotationView.mCallOut tùy chỉnh không hiển thị chính xác trong ios6?

tôi đã chiết xuất các lớp từ các liên kết sau đây

https://github.com/asalom/Custom-Map-Annotation-Callouts/blob/master/Classes/CalloutMapAnnotationView.h

https://github.com/asalom/Custom-Map-Annotation-Callouts/blob/master/Classes/CalloutMapAnnotationView.m

Làm việc tốt trong ios5 nhưng trong ios6 khi tôi nhấp vào cuộc gọi ra chế độ xem bản đồ đang di chuyển và gọi ra không hiển thị chính xác như được hiển thị trong các hình bên dưới trong khi tôi cũng đang phóng to ot đến đúng tôi đã thử một số cách để thoát khỏi vấn đề này bằng cách kiểm tra phiên bản của os và cố gắng thay đổi một số phương thức trong các lớp nhưng không sử dụng.

Sau khi thực hiện những quan điểm bản đồ ios5 sắp tới như thế này enter image description here

Trong iOS6 Cái này không đến đúng như như trong ios5. ví dụ: enter image description here

Trả lời

5

Tôi cũng phải đối mặt với cùng một vấn đề trong iOS 6 sử dụng các lớp này. Những thay đổi này đã làm việc cho tôi:

1) Thay đổi trong phương pháp này:

Phương pháp này bạn sẽ thực hiện trong bản đồ của bạn xem lớp

(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView*)view 

như thứ tự của dòng sau

self.selectedAnnotationView = view; 

[self.mapView addAnnotation:self.calloutAnnotation]; 

2) Trong tệp CalloutMapAnnotationView.m

- (void)adjustMapRegionIfNeeded in this method first 5 lines like bellow 

    CGFloat xPixelShift = 0; 

    if ([self relativeParentXPosition] < 38) { 

     xPixelShift = 38 - [self relativeParentXPosition]; 

    } else if ([self relativeParentXPosition] > self.frame.size.width - 38) { 

    xPixelShift = (self.frame.size.width - 38) - [self relativeParentXPosition]; 

    } 

3) Trong cùng CalloutMapAnnotationView.m lớp - (void)drawRect:(CGRect)rect trong phương pháp này sau khi CGFloat parentX = [self relativeParentXPosition];

dòng trở lên rect = self.bounds; dòng này add sau dòng

if ([self relativeParentXPosition] < 38) { 

     parentX = 38; 

    } else if ([self relativeParentXPosition] > self.mapView.frame.size.width - 38) { 

     parentX = [self relativeParentXPosition]-25; 

    } 

4) Trong cùng CalloutMapAnnotationView.m lớp.

- (void)didMoveToSuperview { 
     [super didMoveToSuperview]; 
     [self.superview bringSubviewToFront:self]; 
    } 

Bạn có thể sử dụng trực tiếp các lớp trên và sử dụng chúng họ làm việc tốt ở cả iOS 5 & iOS 6. Bạn nên thực hiện thay đổi cần thiết theo yêu cầu của bạn.

+0

Cảm ơn bạn, giải pháp này đã giúp tôi. –

+0

câu trả lời tuyệt vời nó thực sự giúp đỡ. Cảm ơn anh bạn. –

+0

hello ios rider – 08442

-2

chỉ cần u có thể thêm tiêu đề nsstring và phụ đề nstring như vậy và _name là tên bạn muốn.

- (NSString *)title { 
    return _name; 
} 
- (NSString *)subtitle { 
    return [NSString stringWithFormat:@"%f, %f", _coordinate.latitude, _coordinate.longitude]; 
} 
+0

đây không phải là những gì đang được hỏi ở tất cả –

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