3

ユーザーがピンをクリックしたときにカスタム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];

}
4

2 に答える 2

12

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];
于 2012-07-10T21:22:35.050 に答える
1

これは完璧ですが、小さな問題が1つあります。ピンとは異なる画像を使用する場合は、ビューを修正する必要があります。ピンの中心に指定します。このような

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];
于 2014-09-15T13:19:23.097 に答える