首先,是什么
foo
radiusView
的父视图是注释视图,对吗?
半径视图
应该和annotationView的一致。这样可以解决您的问题:
-(void) setRadiusFrame:(CGRect)rect{
rect.origin.x -= 0.5*(self.frame.size.width - rect.size.width);
rect.origin.y -= 0.5*(self.frame.size.height - rect.size.height);
[self.radiusView setFrame:rect]
}
不必要的方法
你可以直接在
半径视图
并避免上述计算:
UIView * radiusView = [[[self mapView] viewForAnnotation: annotation] radiusView];
rect = [[self mapView] convertRegion:foo toRectToView: radiusView.superView];
[radiusView setFrame:rect];
-
绘制椭圆时,不要使用
rect
传递给
drawRect:
,它不必与框架相同。直接使用比较安全
self.frame
如果你需要使用上面的层次结构,我给出了以上几点,但是我不明白为什么不直接在
LocationAnnotationView
? 它毕竟是为了这个目的。您可以这样做:
-
缩放时,直接更改注释视图的矩形:
rect = [[self mapView] convertRegion:foo toRectToView: self.mapView];
[[[self mapView] viewForAnnotation: annotation] setFrame:rect];
-
移动
到
这更容易实现,当注释视图的中心点随管脚一起移动时,应该可以解决您的问题,而您不应该看到这个问题。
修正
-
region.span.longitudeDelta = 0.002*cos(region.center.latitude*pi/180.0);
因为经度增量转换成米随纬度变化。或者,您只能设置纬度增量,然后修改矩形使其变为矩形(
width==height
-
在里面
图纸:
矩形
;而是使用
. 这些保证是一样的
矩形
可能有任何价值。