2012-07-10 266 views
3

我在用户单击引脚(如Zillow应用程序)时显示自定义UIView。现在问题是我需要将视图放在实际引脚的上方。 MKAnnotationView坐标系与地图有关。我怎样才能获得关于iPhone屏幕的坐标,然后将我的视图放在该坐标上。将MKAnnotation坐标转换为查看坐标

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

} 

回答

11

使用convertCoordinate:toPointToView:。例如:

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

这是完美的,但有一个小问题。如果您在Pin上使用了不同的图像,则需要对您的视图进行更正指定到您的图钉中心。 像这样

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

太好了,这有助于我的问题。我实际上不得不用5分来完全对齐,但这让我朝正确的方向发展 – otto 2017-06-28 00:58:43