因为我想在 mkmapview 中实现自定义调用,所以我正在使用这些类 CalloutMapAnnotationView.h 和 CalloutMapAnnotationView.m
我从以下链接中提取了这些类
这些在 ios5 中工作正常,但在 ios6 中,当我单击标注时, map View 正在移动并且标注未正确显示,如下图所示,而我正在缩放时它也没有正确显示我已经尝试了几个通过检查 os 的版本并尝试更改类中的一些方法但未使用来摆脱此问题的方法。
在 ios5 map View 中实现这些后像这样
在 Ios6 中,这个不像在 ios5 中那样正常运行。例如
最佳答案
我在使用这些类的 iOS 6
中也遇到过同样的问题。这些更改对我有用:
1) 此方法的更改:
您将在 map View 类中实现此方法
(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) 在同一类 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;
}
4) 在同一个类 CalloutMapAnnotationView.m.
- (void)didMoveToSuperview {
[super didMoveToSuperview];
[self.superview bringSubviewToFront:self];
}
您可以直接使用上述类并使用它们在 iOS 5 和 iOS 6 中都可以正常工作。 您应该根据您的要求进行必要的更改。
关于iphone - 自定义标注在 ios6 中显示不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598739/