我的要求是创建一个显示驾驶室实时跟踪的应用程序。像奥拉,超级等着名的汽车应用程序。
请告诉我如何更新注释,即使是街道转弯和汽车倒车。如何使用MKMapview模拟移动注释。我必须使用的任何图书馆。我搜索但我找不到任何图书馆
答案 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];
我很抱歉,但我不能在这里发布代码,因为我之前已经为我的雇主实施了这个代码并受合同约束。