自定义CallOut在ios6中无法正确显示?

Bal*_*alu 7 iphone objective-c mkmapview ios6

因为我想在mkmapview中实现自定义调用,我使用这些类CalloutMapAnnotationView.h和CalloutMapAnnotationView.m

我从以下链接中提取了这些类

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

这些在ios5中运行正常,但是在ios6中,当我点击呼叫时,地图视图正在移动并且呼出未正确显示,如下图所示,当我缩放时它也未正确显示我已经尝试了几种方法来获取通过检查os的版本摆脱这个问题,并尝试更改类中的一些方法但不使用.

在ios5地图视图中实现这些后,就像这样 在此输入图像描述

在Ios6中这个没有像ios5那样正常.例如 在此输入图像描述

084*_*442 5

我在iOS 6使用这些类时也遇到了同样的问题.这些变化对我有用:

1)改变这种方法:

您将在地图视图类中实现此方法

(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView*)view
Run Code Online (Sandbox Code Playgroud)

按照以下顺序排列

self.selectedAnnotationView = view;

[self.mapView addAnnotation:self.calloutAnnotation];
Run Code Online (Sandbox Code Playgroud)

2)在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];

   }
Run Code Online (Sandbox Code Playgroud)

3)在同一个类CalloutMapAnnotationView.m中 - (void)drawRect:(CGRect)rect在此方法之后CGFloat parentX = [self relativeParentXPosition];

行和rect = self.bounds;此行上方添加以下行

    if ([self relativeParentXPosition] < 38) {

       parentX = 38;

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

       parentX = [self relativeParentXPosition]-25;

   }
Run Code Online (Sandbox Code Playgroud)

4)在同一个类CalloutMapAnnotationView.m中.

- (void)didMoveToSuperview {
        [super didMoveToSuperview];
        [self.superview bringSubviewToFront:self];
    }
Run Code Online (Sandbox Code Playgroud)

您可以直接使用上述类并使用它们,它们可以在iOS 5和iOS 6中正常工作.您应该根据您的要求进行必要的更改.