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

时间:2012-11-28 05:58:22

标签: iphone objective-c ios6 mkmapview

因为我想在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中,当我点击呼叫时,地图视图正在移动,并且呼出未正确显示,如下图所示,当我缩放时,它还没有正确显示我已尝试了几个通过检查操作系统的版本来解决这个问题的方法,并尝试更改类中的一些方法但不使用。

在ios5地图视图中实现这些后,就像这样 enter image description here

在Ios6中这个没有像ios5那样正常。例如 enter image description here

2 个答案:

答案 0 :(得分:5)

我在使用这些类的iOS 6中也面临同样的问题。这些变化对我有用:

1)改变这种方法:

您将在地图视图类

中实现此方法
(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView*)view

按照以下顺序排列

self.selectedAnnotationView = view;

[self.mapView addAnnotation:self.calloutAnnotation];

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

   }

3)在(void)drawRect:(CGRect)rect

之后的同一个类CalloutMapAnnotationView.m - 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;

   }

4)在同一个类CalloutMapAnnotationView.m。

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

你可以直接使用上面的类并使用它们在iOS 5&amp; iOS 6。 您应该根据您的要求进行必要的更改。

答案 1 :(得分:-2)

你可以像这样添加nsstring title和nstring subtitle _name是你想要的标题。

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