美文网首页
高德地图我的位置添加方向箭头

高德地图我的位置添加方向箭头

作者: SySean | 来源:发表于2017-05-25 17:49 被阅读1407次
ic_location_arrow.png

首先,我的位置图标,设计成角的方向指向正上方,因为高德地图的指南针朝向默认是零度(正北 0 being true North),当然其它角度也可以,这样设计只是为了方便计算调整。

/**
 * @brief 根据anntation生成对应的View
 * @param mapView 地图View
 * @param annotation 指定的标注
 * @return 生成的标注View
 */
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation {
    if ([annotation isKindOfClass:[MAPointAnnotation class]]) {
        static NSString *reuseIndetifier = @"MAAnnotationView";
        MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];
        if (annotationView == nil)
        {
            annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:reuseIndetifier];
        }
        
        annotationView.image = [UIImage imageNamed:@"ic_point"];
        annotationView.canShowCallout= NO;       //设置气泡可以弹出,默认为NO
        //设置中心点偏移,使得标注底部中间点成为经纬度对应点
        annotationView.centerOffset = CGPointMake(0, -18);
        return annotationView;
    } else if ([annotation isKindOfClass:[MAUserLocation class]]) {
        // 定义我的位置图片
        static NSString *locationIndetifier = @"MAUserLocationView";
        if (self.userLocationAnnotationView == nil) {
            self.userLocationAnnotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation
                                                                           reuseIdentifier:locationIndetifier];
            self.userLocationAnnotationView.image = [UIImage imageNamed:@"ic_location_arrow"];
        }
        return self.userLocationAnnotationView;
    }
    return nil;
}
}

位置或者设备方向更新后,调整我的位置图标的角度

/**
 * @brief 位置或者设备方向更新后,会调用此函数
 * @param mapView 地图View
 * @param userLocation 用户定位信息(包括位置与设备方向等数据)
 * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新
 */
 - (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation {
    // 让定位箭头随着方向旋转
    if (!updatingLocation && self.userLocationAnnotationView != nil) {
        [UIView animateWithDuration:0.1 animations:^{
            double degree = userLocation.heading.trueHeading - self.mapView.rotationDegree;
            self.userLocationAnnotationView.transform = CGAffineTransformMakeRotation(degree * M_PI / 180.f);
        }];
    }
}

相关文章

网友评论

      本文标题:高德地图我的位置添加方向箭头

      本文链接:https://www.haomeiwen.com/subject/vtuzxxtx.html