大头针固定在屏幕上
///是否固定在屏幕一点, 注意,拖动或者手动改变经纬度,都会导致设置失效
@property (nonatomic, assign, getter = isLockedToScreen) BOOL lockedToScreen;
///固定屏幕点的坐标
@property (nonatomic, assign) CGPoint lockedScreenPoint;
//MAPointAnnotation *annotation;//系统大头针,继承至MAAnnotation
//MAPinAnnotationView //系统预定好的一个annotationView提供类似大头针的效果
MAAnnotationView 标注View 可以通过继承它来自定义大头针(标注)
///提供类似大头针效果的annotation view
@interface MAPinAnnotationView : MAAnnotationView
self.annotation.lockedScreenPoint = CGPointMake(self.mapView.centerX, self.mapView.centerY);
/**
* @brief 设置当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化
* @paramcoordinate要设置的中心点
* @paramanimated是否动画设置
*/
- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinateanimated:(BOOL)animated;
[self.mapView setCenterCoordinate:self.coordinate animated:YES];
self.annotation.lockedToScreen = YES;
被固定在地图中央的大头针,在移动地图的时候,大头针跳起,移动结束后落下
实现过程:用了两张图片 根据情况改变自定义大头针的图片
/**
* @brief 地图区域改变过程中会调用此接口 since 4.6.0
* @parammapView地图View
*/
- (void)mapViewRegionChanged:(MAMapView *)mapView;
/**
* @brief 地图区域即将改变时会调用此接口
* @parammapView地图View
* @paramanimated是否动画
*/
- (void)mapView:(MAMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
在地图区域将要改变,改变过程中两个代理方法里面用跳起的图片
/**
* @brief 地图区域改变完成后会调用此接口
* @parammapView地图View
* @paramanimated是否动画
*/
- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
在地图区域改变完成后用落下的图片
大头针气泡是自定义UIView
允许显示showCallOut ,那就通过addSubView的方式展示在大头针上面(self)
[self addSubview:self.qiPaoView];
[self.qiPaoView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.mas_top);
make.centerX.mas_equalTo(self);
}];
MAUserLocationRepresentation:地图上当前用户位置显示控制
向地图上添加大头针
[mapView addAnnotation:annotation];
地图上展示的是MAAnnotationView、MAPinAnnotationView、自定义annotationView
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation
{
if([annotationisKindOfClass:[MAUserLocation class]]) {
//可以展示自定义annotationView
/* static
NSString*userLocationStyleReuseIndetifier =@"userLocationStyleReuseIndetifier";
DEACustomAnnotationView*annotationView = (DEACustomAnnotationView*)[mapViewdequeueReusableAnnotationViewWithIdentifier:userLocationStyleReuseIndetifier];
if(annotationView ==nil) {
annotationView = [[DEACustomAnnotationViewalloc]initWithAnnotation:annotation reuseIdentifier:userLocationStyleReuseIndetifier];
}*/
//也可以自定义精度圈
MAUserLocationRepresentation *r = [[MAUserLocationRepresentation alloc]init];
r.showsAccuracyRing = NO;///精度圈是否显示,默认YES
r.showsHeadingIndicator = NO;///是否显示方向指示(MAUserTrackingModeFollowWithHeading模式开启)。默认为YES
r.fillColor = [UIColor redColor];///精度圈 填充颜色, 默认 kAccuracyCircleDefaultColor
r.strokeColor = [UIColor blueColor];///精度圈 边线颜色, 默认 kAccuracyCircleDefaultColor
r.lineWidth = 2;///精度圈 边线宽度,默认0
r.enablePulseAnnimation = NO;///内部蓝色圆点是否使用律动效果, 默认YES
r.locationDotBgColor = [UIColor greenColor];///定位点背景色,不设置默认白色
r.locationDotFillColor = [UIColor grayColor];///定位点蓝色圆点颜色,不设置默认蓝色
r.image = [UIImage imageNamed:@"你的图片"]; ///定位图标, 与蓝色原点互斥
[self.mapView updateUserLocationRepresentation:r];
//若什么都不展示
return nil;
}
地图上展示不同数据的annotationview
可以继承MAPointAnnotation 实现自定义大头针加一个属性 index 用来区分是哪个大头针
在view上展示内容的时候,根据index取出相应的数据
if([annotation isKindOfClass:[HHPointAnnotation class]])
{
static NSString*customReuseIndetifier =@"customReuseIndetifier";
HHPointAnnotation*ano = annotation;
CustomAnnotationView*annotationView = (CustomAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:customReuseIndetifier];
if(annotationView ==nil)
{
annotationView = [[CustomAnnotationView alloc]initWithAnnotation:annotationreuseIdentifier:customReuseIndetifier];
annotationView.canShowCallout=NO;
annotationView.draggable=YES;
}
AnnotationModel *model = self.dataArray[ano.index];
annotationView.image= [UIImage imageNamed:model.imageName];
return annotationView;
}