首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKPinAnnotationView非中心化

MKPinAnnotationView非中心化
EN

Stack Overflow用户
提问于 2015-03-22 17:24:40
回答 2查看 2K关注 0票数 3

在上传了MKPinAnnotationView的自定义图像后,我注意到引脚是不居中的。该引脚应该在路线的折线上的一个点上,并且位于一个an圆的中心;然而,这个引脚似乎在折线的右边和中间的一点以北。我尝试过使用centerOffset属性,但是当我将值插入该属性时,似乎没有什么改变。这是密码,

代码语言:javascript
复制
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

static NSString *viewID = @"MKPinAnnotationView";
MKPinAnnotationView *annotationView = (MKPinAnnotationView*)
[self.mapView dequeueReusableAnnotationViewWithIdentifier:viewID];

if(annotationView ==nil){
    annotationView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:viewID];
}


annotationView.image = [UIImage imageNamed:@"Pin.png"];
annotationView.enabled = YES;

//doesn't move the pin, still offcentered
annotationView.centerOffset = CGPointMake(0,-50);
return annotationView;
 }

只是想补充一下,我还注意到,在新的引脚图像中,当我点击引脚时,什么都不会弹出。在使用默认引脚之前,单击引脚后会出现文本气泡。既然是这种情况,我想要包括方法的代码,该方法在地图上制作并放置引脚,

代码语言:javascript
复制
-(void) createAndAddAnnotationForCoordinate : (CLLocationCoordinate2D)coordinate{

MKPointAnnotation* annotation = [[MKPointAnnotation alloc]init];
annotation.coordinate = coordinate;
annotation.title = @"This is a pin!";

[mapView addAnnotation:annotation];


}

我还试着改变引脚图像,看看这是否会影响MKPinAnnotationView的定位。虽然我能够通过编辑图像的引脚中心,但它并不是对其他多线的中心。任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-24 02:57:32

首先,重要的一点是,在使用自定义注释映像时,最好使用普通的MKAnnotationView类,而不是用于自动显示标准引脚图像的子类MKPinAnnotationView

这是因为MKPinAnnotationView根据自己的引脚图像对注释视图的框架和centerOffset进行了一些内置的调整。在某些情况下,您的自定义图像甚至会在屏幕上被默认的引脚图像替换。因此,即使MKPinAnnotationView有一个image属性,该类也不会像预期的那样使用它。

其次,设置centerOffset,以便在缩放地图时,图像中“指向”坐标的部分继续指向坐标。这是因为centerOffset位于屏幕CGPoint中,不随地图缩放级别而缩放。如果centerOffset设置不当,图像的“点”将开始偏离目标坐标。

另外,请注意,您甚至不需要设置centerOffset,因为默认设置会将图像的中心放置在坐标上,这可能是可以的。

根据您发布的图像,下面是代码和由此产生的外观centerOffset ,而不设置(将其保留在默认位置)

代码语言:javascript
复制
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

    static NSString *viewID = @"MKPinAnnotationView";

    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:viewID];

    if (annotationView ==nil) {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:viewID];
        annotationView.image = [UIImage imageNamed:@"Pin.png"];
        annotationView.canShowCallout = YES;
    }
    else {
        annotationView.annotation = annotation;
    }

    return annotationView;
}

(我添加了红色中心线,以显示目标坐标相对于引脚图像的位置。)

下面是代码和由此产生的外观centerOffset ,设置了,以便底部指向坐标

代码语言:javascript
复制
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

    static NSString *viewID = @"MKPinAnnotationView";

    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:viewID];

    if (annotationView ==nil) {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:viewID];
        annotationView.image = [UIImage imageNamed:@"Pin.png"];
        annotationView.canShowCallout = YES;
        annotationView.centerOffset = CGPointMake(0,-15);
    }
    else {
        annotationView.annotation = annotation;
    }

    return annotationView;
}

票数 10
EN

Stack Overflow用户

发布于 2015-03-22 17:43:18

必须设置MKCoordinateRegion以加载映射,编辑createAndAddAnnotationForCoordinate方法如下所示

代码语言:javascript
复制
-(void) createAndAddAnnotationForCoordinate : (CLLocationCoordinate2D)coordinate{

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(coordinate, 3000, 3000); //Set zooming level
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion]; //add location to map
    [mapView setRegion:adjustedRegion animated:YES]; // create animation zooming

MKPointAnnotation* annotation = [[MKPointAnnotation alloc]init];
annotation.coordinate = coordinate;
annotation.title = @"This is a pin!";

[mapView addAnnotation:annotation];


}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29197476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档