如何使用地图的注解功能

如何使用地图的注解功能

如何使用地图的注解功能

实现了协议MKAnnotation的对象才能够被用地图上的注解对象,一般都是如下定义的.

DisplayMap.h + DisplayMap.m

//

//  DisplayMap.h

//  MoreMapInfo

//

//  Copyright (c) 2014年 Y.X. All rights reserved.

//



#import <Foundation/Foundation.h>

#import <MapKit/MapKit.h>



@interface DisplayMap : NSObject <MKAnnotation>



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

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

@property (nonatomic, assign, readonly) CLLocationCoordinate2D   coordinate;



- (id)initWithTitle:(NSString*)title

           SubTitle:(NSString*)subtitle

         Coordinate:(CLLocationCoordinate2D)coordinate;



@end
//

//  DisplayMap.m

//  MoreMapInfo

//

//  Copyright (c) 2014年 Y.X. All rights reserved.

//



#import "DisplayMap.h"



@implementation DisplayMap



- (id)initWithTitle:(NSString*)title

           SubTitle:(NSString*)subtitle

         Coordinate:(CLLocationCoordinate2D)coordinate

{

    if (self = [super init])

    {

        _title      = title;

        _subtitle   = subtitle;

        _coordinate = coordinate;

    }

    

    return self;

}



@end

RootViewController.m

//

//  RootViewController.m

//  MoreMapInfo

//

//  Copyright (c) 2014年 Y.X. All rights reserved.

//



#import "RootViewController.h"

#import <MapKit/MapKit.h>

#import "DisplayMap.h"

#import "LocationCoder.h"

#import "YXLocationManager.h"



@interface RootViewController ()<CLLocationManagerDelegate, MKMapViewDelegate>



@property (nonatomic, strong) MKMapView  *mapView;



@end



@implementation RootViewController



- (void)viewDidLoad

{

    [super viewDidLoad];

    

    [YXLocationManager getCurrentLocation:^(CLLocation *location, NSError *error) {

        if (error == nil)

        {

            // 将经纬度解析为地址

            LocationCoder *lCoder = [[LocationCoder alloc] initWithLocation:location];

            [lCoder startAnalyseLocation];

            lCoder.resultBlock = ^(NSArray *placemarks, NSError *error,

                                   LocationCoder *locationCoder)

            {

                NSLog(@"%@", locationCoder.addressLines);

            };

            

            //地图

            _mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];

            _mapView.delegate          = self;

            _mapView.showsUserLocation = YES;

            _mapView.mapType           = MKMapTypeHybrid;

            _mapView.region = MKCoordinateRegionMake(location.coordinate,

                                                     MKCoordinateSpanMake(0.1, 0.1));

            

            //加入大头针

            DisplayMap *anno = [[DisplayMap alloc]initWithTitle:@"title"

                                                       SubTitle:@"subtitle"

                                                     Coordinate:CLLocationCoordinate2DMake(39.928168, 116.39328)];

            [_mapView addAnnotation:anno];

            [self.view addSubview:_mapView];

            

            //给地图添加长按手势,插上大头针

            UILongPressGestureRecognizer* longPress = \

            [[UILongPressGestureRecognizer alloc] initWithTarget:self

                                                          action:@selector(longPress:)];

            [_mapView addGestureRecognizer:longPress];

        }

        else

        {

            NSLog(@"%@", error);

        }

    }];

}



#pragma mark - viewDidLoad UILongPressGestureRecognize longPress:

- (void)longPress:(UILongPressGestureRecognizer*)longPress

{

    //长按一次 只在开始插入一次大头针   否则能用大头针写字。。。

    if (longPress.state == UIGestureRecognizerStateBegan)

    {

        CGPoint point = [longPress locationInView:_mapView];

        CLLocationCoordinate2D coordinate = [_mapView convertPoint:point

                                              toCoordinateFromView:_mapView];

        

        

        DisplayMap* an = [[DisplayMap alloc] initWithTitle:@"title"

                                                  SubTitle:@"subtitle"

                                                Coordinate:coordinate];

        [_mapView addAnnotation:an];

        

        [_mapView setCenterCoordinate:coordinate

                             animated:YES];

    }

}



#pragma mark - MKMapViewDelegate

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

{

    //如果是所在地,跳过(固定写法)

    if ([annotation isKindOfClass:[mapView.userLocation class]])

    {

        return nil;

    }

    

    // 重用

    MKPinAnnotationView* pinView = (MKPinAnnotationView*)\

        [mapView dequeueReusableAnnotationViewWithIdentifier:@"ID"];

    if (pinView == nil)

    {

        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation

                                                  reuseIdentifier:@"ID"];

    }

    

    //能显示Call信息上面那些图字(很重要哦)

    pinView.canShowCallout = YES;

    

    //只有三种

    pinView.pinColor = MKPinAnnotationColorPurple;



    //显示动画 - 从天上落下

    pinView.animatesDrop = YES;

    

    pinView.image = [UIImage imageNamed:@"地图标点"];

    

    // 左侧CalloutAccessoryView(使用了自定义view)

    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];

    view.backgroundColor = [UIColor redColor];

    pinView.leftCalloutAccessoryView = view;

    

    // 右侧CalloutAccessoryView(使用了系统的按钮)

    UIButton* button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    pinView.rightCalloutAccessoryView = button;

    

    return pinView;

}



- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

{

    NSLog(@"点击事件");

}



@end

打印信息:

2014-05-26 10:24:46.005 MoreMapInfo[6138:60b] AKLocation - [Line 118]
 Started locating
 ==============
 Distance filter accuracy: -1.00
 Desired accuracy: 100.00
 Timeout: 10.00
May 26 10:24:47 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:47.331 MoreMapInfo[6138:9c07] vImage decode failed, falling back to CG path.
May 26 10:24:47 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:47.372 MoreMapInfo[6138:8f0b] vImage decode failed, falling back to CG path.
2014-05-26 10:24:47.462 MoreMapInfo[6138:60b] 中国北京市东城区东四街道东四朝阳门北小街2-1号
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.363 MoreMapInfo[6138:a803] vImage decode failed, falling back to CG path.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.375 MoreMapInfo[6138:a603] vImage decode failed, falling back to CG path.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.402 MoreMapInfo[6138:9607] vImage decode failed, falling back to CG path.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.420 MoreMapInfo[6138:910b] vImage decode failed, falling back to CG path.
2014-05-26 10:24:48.421 MoreMapInfo[6138:9e07] vImage decode failed, falling back to CG path.
2014-05-26 10:25:10.317 MoreMapInfo[6138:60b] 点击事件

如何使用地图的注解功能如何使用地图的注解功能

 

要点:

// 能显示Call信息上面那些图字(很重要哦)
pinView.canShowCallout = YES

 

 

你可能感兴趣的:(注解)