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

准备任务:

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;

}];

}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值