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

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);
        }];
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,254评论 25 709
  • 共享单车的火爆为地图类应用带来了崭新的使用场景,百度地图抓住时机地增加了共享单车的功能入口,同时新增了“地铁+共享...
    baolvlv阅读 22,146评论 4 118
  • 野丹丹(译)于叽叽(编辑) 经过我长期的软磨硬泡,终于跟美女视觉设计师野丹丹同学约到了一篇优质翻译稿。原文由全球著...
    于叽叽阅读 5,353评论 6 40
  • 【20171010】 一早从冰箱里取出牛奶,吓了我一跳,怎么上面有特价标签?一看是10月8日到期,明明是昨天下午(...
    顾燕阅读 4,075评论 0 1
  • 志威总算有惊无险的回到了家,刘彩云在家门口摆上火盆,执意让志威跨过去,一阵扭捏后,勉为其难的跨了过去,两个弟弟凑着...
    董小幺阅读 2,865评论 0 1