gpt4 book ai didi

ios - 如何正确地为 map 注释运动设置动画?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:36 24 4
gpt4 key购买 nike

我在 MKMapView 上显示城市公交车的实时位置。我的应用程序以一定的时间间隔轮询位置并在 map 上更新它们。我正在尝试为 map 注释的移动设置动画。

我已经使用从 this stackoverflow answer 中找到的以下代码成功地制作了动画运动:

- (void)moveBusAnnotation:(TKLBus*)bus coordinate:(CLLocationCoordinate2D)coordinate {
[UIView animateWithDuration:0.5f
animations:^(void){
bus.annotation.coordinate = coordinate;
}];
}

问题是当用户在播放动画时平移或缩放 map 时,注释的运动路径看起来很奇怪且有错误。这是一个演示:

map annotation animation

注意 map 注释是如何遵循一条奇怪的曲线而不是直线的。 公交车的行驶是模拟的,所以请忽略它在 map 上的奇怪位置。

如何使动画看起来更自然或在平移/缩放 map 时停止动画?

编辑:动画似乎做了正确的事情。它看起来很奇怪,因为 map 注释的下一个坐标在动画播放时正在移动。我认为解决方案是在用户触摸屏幕时阻止动画。

最佳答案

试试这个:

设置一个 bool 值来指示用户是否正在使用 map :

@property (nonatomic, assign) BOOL userIsInteracting;

然后检查 map 中的用户触摸:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];

for (UITouch * touch in touches)
{
CGPoint loc = [touch locationInView:_mapView];
if ([_mapView pointInside:loc withEvent:event])
{
_userIsInteracting = YES;
break;
}
}
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];

for (UITouch * touch in touches)
{
CGPoint loc = [touch locationInView:_mapView];
if ([_mapView pointInside:loc withEvent:event])
{
_userIsInteracting = NO;
break;
}
}
}

现在您知道何时为 map 中的位置设置动画了:

- (void)moveBusAnnotation:(TKLBus*)bus coordinate:(CLLocationCoordinate2D)coordinate 
{
if (_userIsInteracting) return;

[UIView animateWithDuration:0.5f
animations:^(void){
bus.annotation.coordinate = coordinate;
}];
}

关于ios - 如何正确地为 map 注释运动设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25713897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com