Bal*_*alu 7 iphone objective-c mkmapview ios6
因为我想在mkmapview中实现自定义调用,我使用这些类CalloutMapAnnotationView.h和CalloutMapAnnotationView.m
我从以下链接中提取了这些类
这些在ios5中运行正常,但是在ios6中,当我点击呼叫时,地图视图正在移动并且呼出未正确显示,如下图所示,当我缩放时它也未正确显示我已经尝试了几种方法来获取通过检查os的版本摆脱这个问题,并尝试更改类中的一些方法但不使用.
在ios5地图视图中实现这些后,就像这样

在Ios6中这个没有像ios5那样正常.例如

我在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中正常工作.您应该根据您的要求进行必要的更改.
| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |