MKMapview实时汽车追踪

时间:2016-11-02 15:04:48

标签: ios objective-c mkmapview

我的要求是创建一个显示驾驶室实时跟踪的应用程序。像奥拉,超级等着名的汽车应用程序。

请告诉我如何更新注释,即使是街道转弯和汽车倒车。如何使用MKMapview模拟移动注释。我必须使用的任何图书馆。我搜索但我找不到任何图书馆

2 个答案:

答案 0 :(得分:4)

我认为问题是在地图上平滑地转动注释。因为您可以放置​​自己的自定义图像而不是默认的蓝点。

为了平滑转动,您可以使用CMMotionManager,因为它可以为您提供加速度,因此您可以通过参考注释视图来旋转图像。您可以使用update devicemotion数据更新加速度数据。当你沿着x,y和z得到useracceleration时,你可以通过tan函数获得角度。这应该可以解决你的问题

获取角度的代码

[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
    double angle = atan(motion.userAcceleration.x/motion.userAcceleration.y);
}];

答案 1 :(得分:2)

解决这个问题非常简单。如果您在实施此库时遇到问题,为什么不自己动手并学习一些东西呢?您只需创建一些存储坐标和先前坐标的Vehicle模型类。为了能够在地图上显示它,它必须遵守MKAnnotation协议 - 实现:标题,副标题和坐标。在从网络获取位置数据时,默认设置newCoordinate位置。您需要跟踪两个值才能成功制作动画。

因此实现这样的事情:

@interface Vehicle : NSObject <MKAnnotation>

@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly, copy) NSString *subtitle;

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, assign) CLLocationCoordinate2D newCoordinate;

@end

设置newCoordinate后,将前一个值从custom setter移动到coordinate属性中。完成此操作后,您将像往常一样为注释设置动画。

// new coordinate obtained from networking
- (void)setNewCoordinate:(CLLocationCoordinate2D)newCoordinate {

    // implement the value moving part

    _newCoordinate = newCoordinate;
}

但是在检测动画注释上的点击时要小心,因为它的工作方式。当动画开始为完成帧的值时,将设置注释框。您需要在动画期间在屏幕上显示的注释的presentationLayer上点击“点击”。

处理水龙头覆盖

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

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
}

使用

制作动画
[UIView animateWithDuration:0 
                      delay:0 
                    options:UIViewAnimationOptionCurveEaseIn 
                 animations:^{

} completion:nil];

我很抱歉,但我不能在这里发布代码,因为我之前已经为我的雇主实施了这个代码并受合同约束。