2012-07-10 68 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