在IOS中的地图中的引脚上设置自定义图像

时间:2017-10-20 12:39:05

标签: ios objective-c mapkit

我在视图控制器中有一个地图视图,当我在所需的地方制作一个图钉时,我给出了我自己的图像,尽管有默认图像,但是当我运行并检查地图时,它总是在我的地图中显示默认图钉我的形象已经过去了。我的代码就是这个,

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
MKAnnotationView *view=[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"annoView"];
if (!view) {
    view=[[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"annoView"];
    if ([annotation isKindOfClass:[MKUserLocation class]]) {
        return nil;
    }else{
    view.image=[UIImage imageNamed:@"car_marker.png"];
        view.canShowCallout=YES;
    }
}

return view;

}

 MapPin *pin=[[MapPin alloc]init];
    pin.title=loc[@"name"];
    pin.subtitle=nil;
    pin.coordinate=annoCordinate;
    [self.mapView addAnnotation:pin];
    [self.mapView setCenterCoordinate:pin.coordinate animated:YES];

1 个答案:

答案 0 :(得分:0)

这很容易实现,您只需要子类MKAnnotationView并为其添加自定义图像视图。可以找到一个很好的例子here

如果链接死了,我还包含了下面的代码片段,请尽管显示OP有些爱!

@interface TStickerAnnotationView : MKAnnotationView

@property(nonatomic) float stickerColor;

@end

@interface TStickerAnnotationView () {
    UIImageView *_imageView;
    TCircleView *_circleView;
}


@end

@implementation TStickerAnnotationView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // make sure the x and y of the CGRect are half it's
        // width and height, so the callout shows when user clicks
        // in the middle of the image
        CGRect  viewRect = CGRectMake(-30, -30, 60, 60);

        TCircleView* circleView = [[TCircleView alloc] initWithFrame:viewRect];
        _circleView = circleView;
        [self addSubview:circleView];

        UIImageView* imageView = [[UIImageView alloc] initWithFrame:viewRect];

        // keeps the image dimensions correct
        // so if you have a rectangle image, it will show up as a rectangle,
        // instead of being resized into a square
        imageView.contentMode = UIViewContentModeScaleAspectFit;

        _imageView = imageView;

        [self addSubview:imageView];



    }
    return self;
}

- (void)setImage:(UIImage *)image
{
    // when an image is set for the annotation view,
    // it actually adds the image to the image view
    _imageView.image = image;
}

- (void)stickerColor:(float)color {
    _circleView.green = color;
    [_circleView setNeedsDisplay];
}