将MKAnnotation坐标转换为视图坐标

我显示一个自定义的UIView当用户点击的引脚(如Zillow应用程序)。 现在的问题是,我需要将视图放在实际引脚上方。 MKAnnotationView坐标系与地图有关。 我怎样才能得到相对于iPhone屏幕的坐标,然后把我的视图放在那个坐标上。

- (void)mapView:(MKMapView *)mv didSelectAnnotationView:(MKAnnotationView *)view { // get view from storyboard ZillowSearchResultAnnotation *annotation = (ZillowSearchResultAnnotation *) view.annotation; PropertyAbstractViewController *propertyAbstractViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PropertyAbstractIdentifier"]; propertyAbstractViewController.view.frame = CGRectMake(0, 0, 100, 100); [propertyAbstractViewController bind:annotation.data]; [mv addSubview:propertyAbstractViewController.view]; } 

使用convertCoordinate:toPointToView:。 就像是:

 UIView *view = ... CGPoint p = [mv convertCoordinate:annotation.coordinate toPointToView:mv]; CGRect frame = CGRectMake(px,py,view.frame.size.width,view.frame.size.height); view.frame = frame; [self.view addSubView:view]; 

这是完美的,但有一个小问题。 如果你使用不同的图像到你的Pin,比你需要更正你的看法指定中心的引脚。 喜欢这个

 UIView *view = ... CGPoint p = [mv convertCoordinate:annotation.coordinate toPointToView:mv]; CGRect frame = CGRectMake(px - (view.frame.size.width/2), py- (view.frame.size.height / 2), view.frame.size.width, view.frame.size.height); view.frame = frame; [self.view addSubView:view];