干货系列:自定义大头针<地图>

2016-05-02  本文已影响301人  小人不才

准备任务:

infoplist  文件中配置:Localization native development region

viewcontroller .m:

#import "ViewController.h"#import#import "HMAnnotation.h"

#import "HMAnnotationView.h"

#import "HMAnnotation.h"

#import <MapKit/MapKit.h>

//在loadview方法中定义mapview

- (void)loadView {

MKMapView *mapView = [[MKMapView alloc] init];

self.view = mapView;

self.mapView = mapView;

mapView.delegate = self;

}


自定义的大头针,保证大头针扎在地图上

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event

{

//  获取当前的触摸对象

UITouch *touch = [touches anyObject];

//  用户触摸的点

CGPoint location = [touch locationInView:self.view];

//  让大头针在底部在触摸点上

UIImage *image = [UIImage imageNamed:@"category_1"];

location.y = location.y - image.size.height * 0.5;

//  把View上坐标的点,转换为地图经纬度

CLLocationCoordinate2D coordinate  = [self.mapView convertPoint:location toCoordinateFromView:self.view];

//  添加大头针(标注)

HMAnnotation *annotation = [[HMAnnotation alloc] init];

annotation.coordinate = coordinate;

annotation.title = @"黑马程序员";

annotation.subtitle = @"IT教育领导者";

//  设置一个0-4的随机数

annotation.type = arc4random_uniform(5);

//  添加大头针模型到地图上

[self.mapView addAnnotation:annotation];

}


// 返回一个可以重用的大头针

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation

{

if ([annotation isKindOfClass:[HMAnnotation class]]) {

NSString *reuseID = @"hmAnnotationView";

HMAnnotationView *annotationView = (HMAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseID];

if (annotationView == nil) {

annotationView = [[HMAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseID];

annotationView.canShowCallout = YES;

}

annotationView.annotation = annotation;

return annotationView;

}

return nil;

}


/**

只有当大头针被添加到了,地图上之后,才能执行动画

*/

/**

当大头针已经被添加到了地图执行

@param views  大头针数组

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray*)views

{

for (MKAnnotationView *annotationView in views) {

//      1. 记录当前大头针的位置

CGPoint center  = annotationView.center;

//      2. 使用不带动画的方式,把大头针视图移动地图的顶部

annotationView.center = CGPointMake(center.x, 0);

//      3. 使用动画让大头针视图回到原来的位置

[UIView animateWithDuration:0.2 animations:^{

annotationView.center = center;

}];

}

}





上一篇下一篇

猜你喜欢

热点阅读