更改地图图钉(颜色或图像) [英] Change map pin (color or image)

查看:125
本文介绍了更改地图图钉(颜色或图像)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这是一个经常问的问题.一段时间以来,我一直在阅读有关此的许多问题.我希望有人能够使用一种更简单的方法来使用必须用图像替换地图上的图钉的代码.我对目标c还是很陌生.我的代码非常简短.我在网上找到的大多数将销钉张贴到地图上的东西都很长,而且绘制出来.我的地图视图具有以下类和控制器:

I know this is a question asked a lot. I have been reading through many of the questions on here regarding this for a while. I was hoping someone would have a simpler way using the code I have to replace the pins on my map with an image. I am still very new to objective c.The code I have is very short and easy. Most of what I have found online to post pins to a map is very long and drawn out. I have the following classes and controllers for my map view:

LocationsViewController.h

#import "TechBookAppDelegate.h"
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>


@interface LocationsViewController : UIViewController <MKMapViewDelegate>
{

    IBOutlet MKMapView *worldView;
    IBOutlet UIActivityIndicatorView *activityIndicator;

}
@end

LocationsViewController.m

 #import "LocationsViewController.h"
#import "MapAnnotation.h"
@interface LocationsViewController ()


@end

@implementation LocationsViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code


    }
    return self;
}



- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    CLLocationCoordinate2D wisconsin = {.latitude =  xx.xxxxxxx, .longitude =  -xx.xxxxxx};
    CLLocationCoordinate2D pennsyvainia = {.latitude =  xx.xxxxxxx, .longitude =  -xx.xxxxxx};
    CLLocationCoordinate2D nevada = {.latitude =  xx.xxxxxxx, .longitude =  -xx.xxxxxx};
    CLLocationCoordinate2D texas = {.latitude =  xx.xxxxxxx, .longitude =  -xx.xxxxxx};
    MapAnnotation *pinWI = [[MapAnnotation alloc] initWithCoordinate: wisconsin];
    MapAnnotation *pinPA = [[MapAnnotation alloc] initWithCoordinate: pennsyvainia];
    MapAnnotation *pinNV = [[MapAnnotation alloc] initWithCoordinate: nevada];
    MapAnnotation *pinTX = [[MapAnnotation alloc] initWithCoordinate: texas];

    [worldView addAnnotation:pinTX];
    [worldView addAnnotation:pinNV];
    [worldView addAnnotation:pinWI];
    [worldView addAnnotation:pinPA];


}

MapAnnotation.h

  #import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface MapAnnotation : NSObject <MKAnnotation> {
    CLLocationCoordinate2D _coordinate;
    MKAnnotationView *mapView;
}

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate;

@end

MapAnnotation.m

#import "MapAnnotation.h"
#import "LocationsViewController.h"

@implementation MapAnnotation
@synthesize coordinate = _coordinate;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
{
    self = [super init];

    if (self != nil)
    {
        _coordinate = coordinate;
    }

    return self;
}
@end

我试图实现类似于以下的方法:

I have tried to implement methods similar to this:

 -(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{.......

具有各种类型的代码,但无济于事.不知道我在做什么错.没有比现在为止在网上看到的方法更短的方法来做我在想的事情了.

with various types of code but to no avail. Not sure what I am doing wrong. Isn't there a shorter way to do what I am thinking than this than what I have seen so far online.

我希望有类似的东西:

MapAnnotation *pinWI = [[[MapAnnotation alloc] initWithCoordinate: wisconsin] initWithPinImage:@"imagename.png"];

或者我可以实现类似于以下内容的方法: pinWI:MKPinAnnotationColorGreen; 仅定义了图像位置?

or could I implement something similar to this: pinWI:MKPinAnnotationColorGreen; only with a image location defined?

或类似的内容.在此先感谢大家对新手的帮助和耐心.

or something along those lines. Thanks in advance for everyones help and patience with a newbie.

我真的需要将图钉更改为自定义图片.我尝试过的一种编码模式是:

    - (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString *AnnotationViewID = @"annotationViewID";

    MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    {
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
    }

    annotationView.image = [UIImage imageNamed:@"location.png"];
    annotationView.annotation = annotation;

    return annotationView;
}

工作代码:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{

    static NSString *AnnotationViewID = @"annotationViewID";

    MKAnnotationView *annotationView = (MKAnnotationView *)[worldView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

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

    annotationView.image = [UIImage imageNamed:@"locations_marker.png"];
    annotationView.annotation = annotation;

    return annotationView;
}

推荐答案

type属性(例如example-firstPin,secondPin,thirdPin等)添加到您的自定义MapViewAnnotation类中.

add the type property(example-firstPin, secondPin,thirdPin etc) to your custom MapViewAnnotation class.

MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] init...
newAnnotation.type = @"firstPin";  // <-- set property in annotation
[self.mapView addAnnotation:newAnnotation];

,然后在您的- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation方法中进行简单的检查

and in your - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation method put a simple check

MapViewAnnotation *mvAnn = (MapViewAnnotation *)annotation;
if ([mvAnn.type isEqualToString:@"firstPin"])
{
    annView.pinColor = MKPinAnnotationColorGreen;
}
else if ([mvAnn.type isEqualToString:@"secondPin"])
{
    annView.pinColor = MKPinAnnotationColorRed;
}
else if ([mvAnn.type isEqualToString:@"thirdPin"])
{
    annView.pinColor = MKPinAnnotationColorOrange;
}

这篇关于更改地图图钉(颜色或图像)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆