iOS之MKMapView上显示标注MKAnnotationView

   经常会在地图上看到标志出自己的位置,在iOS中,在地图上显示标注也比较简单,如果还不知道怎么使用MKMapView可以查看 之前的一篇博文 http://my.oschina.net/CarlHuang/blog/135589.

   首先我们先自定义一个MyAnnotation类,继承自NSObject 和实现 <MKAnnotation> 协议 , 定义三个属性,设置为只读.

@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;

@property (nonatomic,copy,readonly) NSString * title;

@property (nonatomic,copy,readonly) NSString * subtitle;

 MyAnnotation.h 文件代码:

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



@interface MyAnnotation : NSObject <MKAnnotation>
//显示标注的经纬度
@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;
//标注的标题
@property (nonatomic,copy,readonly) NSString * title;
//标注的子标题
@property (nonatomic,copy,readonly) NSString * subtitle;
@

-(id)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates title:(NSString *)paramTitle
                subTitle:(NSString *)paramTitle;

@end
  MyAnnotation.m 文件代码:

#import "MyAnnotation.h"

@implementation MyAnnotation
-(id)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates title:(NSString *)paramTitle
                subTitle:(NSString *)paramSubitle
{
    self = [super init];
    if(self != nil)
    {
        _coordinate = paramCoordinates;
        _title = paramTitle;
        _subtitle = paramSubitle;
        _pinColor = MKPinAnnotationColorGreen;
    }
    return self;
}

@end
  在地图中添加标注的方法

  [self.mapView addAnnotation:]

  [self.mapView addAnnotations:arr];

 添加标注会调用MKMapViewDelegate 中的 

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

   ViewController.h 文件代码:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController
@property (nonatomic,strong) MKMapView * myMapView;
@end
  ViewController.m文件代码:

#import "ViewController.h"
#import "MyAnnotation.h"
#import "MapAnnotation.h"

@interface ViewController () <MKMapViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    
    

    
    self.myMapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    self.myMapView.mapType = MKMapTypeHybrid;
    self.myMapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    self.myMapView.delegate = self;
//    self.myMapView.showsUserLocation = YES;

    [self.view addSubview:self.myMapView];
    
    CLLocationCoordinate2D location = CLLocationCoordinate2DMake(50.82191692907181, -0.13811767101287842);
    
    MyAnnotation * myAnnotation = [[MyAnnotation alloc] initWithCoordinates:location title:@"My Title" subTitle:@"My Sub Title"];


    
    [self.myMapView addAnnotation:myAnnotation];
    //自动显示标注的layout
    [self.myMapView selectAnnotation:myAnnotation animated:YES];
    
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES;
}


-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    MKAnnotationView * result = nil;
    if([annotation isKindOfClass:[MyAnnotation class]] == NO)
    {
        return result;
    }
    
    if([mapView isEqual:self.myMapView] == NO)
    {
        return result;
    }
    
    
    MyAnnotation * senderAnnotation = (MyAnnotation *)annotation;
    NSString * pinReusableIdentifier = [MyAnnotation reusableIdentifierForPinColor:senderAnnotation.pinColor];
    MKPinAnnotationView * annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinReusableIdentifier];
    if(annotationView == nil)
    {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:senderAnnotation reuseIdentifier:pinReusableIdentifier];
        
        [annotationView setCanShowCallout:YES];
    }
    
    
    UIButton * button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    annotationView.rightCalloutAccessoryView = button;
    
    annotationView.opaque = NO;
    annotationView.animatesDrop = YES;
    annotationView.draggable = YES;
    annotationView.selected = YES;
    annotationView.calloutOffset = CGPointMake(15, 15);
    
    UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SFIcon.png"]];
    annotationView.leftCalloutAccessoryView = imageView;

    result = annotationView;
    return result;
    
}


@end

你可能感兴趣的:(ios,xcode,MkMapView,MKAnnotation)