gpt4 book ai didi

ios - 自定义按钮跟踪 MKUserTrackingMode

转载 作者:行者123 更新时间:2023-11-29 12:33:14 25 4
gpt4 key购买 nike

我正在尝试实现一个自定义按钮来跟踪 MKUserTrackingMode。我知道有一个 MKUserTrackingBarButtonItem 但是我不能使用它,因为我的按钮不在工具栏/导航栏中,所以我无法实现自己的逻辑。

基本上我想要与 MKUserTrackingBarButtonItem 提供的逻辑相同,但我很难实现它。基本上,如果在 MKUserTrackingModeNone 中单击按钮,则移动到带有动画的 MKUserTrackingModeFollow。这就是我的问题出现的地方,如果 map 在切换此状态时是动画的,我不希望用户能够进入下一个状态 MKUserTrackingModeFollowWithHeading。 IE 用户必须等到 map 动画完成并且用户在 map View 中居中才能移动到 MKUserTrackingModeFollowWithHeading 状态。主要是我的问题是试图检测 mapview 何时完成动画。

我已经实现了:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
self.isTrackingAnimation = NO;
}

因此,当我的 map 动画停止时,我会设置一个标志来指示我不再​​制作动画。

我尝试实现了一个可以判断状态是否可以切换的方法。

- (BOOL) setUserTrackingMode:(MKUserTrackingMode) mode {
if (self.isTrackingAnimation && mode == MKUserTrackingModeFollowWithHeading) return NO;

return YES;
}

- (IBAction)onTrackingButtonPressed:(id)sender {
switch (self.mapView.userTrackingMode) {
case MKUserTrackingModeNone: {
if ([self canSetUserTrackingMode:MKUserTrackingModeFollow]) {
[self.trackingButton setImage:[UIImage imageNamed:@"location_arrow_on.png"] forState:UIControlStateNormal];
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
self.isTrackingAnimation = YES;

}

break;
};
case MKUserTrackingModeFollow: {
if ([self canSetUserTrackingMode:MKUserTrackingModeFollowWithHeading]) {
[self.trackingButton setImage:[UIImage imageNamed:@"location_arrow_follow.png"] forState:UIControlStateNormal];
[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];

}

break;
};
case MKUserTrackingModeFollowWithHeading: {
if ([self canSetUserTrackingMode:MKUserTrackingModeNone]) {
[self.trackingButton setImage:[UIImage imageNamed:@"location_arrow_off.png"] forState:UIControlStateNormal];
[self.mapView setUserTrackingMode:MKUserTrackingModeNone animated:YES];

}

break;
}
}
}

当我多次切换状态时出现问题,从 MKUserTrackingModeNone 到 MKUserTrackingModeFollow 的转换实际上并没有为 map 设置动画,因为 map 已经以用户位置为中心。 IE。我说我要用动画跟踪用户所以我设置 self.isTrackingAnimation = YES;但它永远不会设置为 NO,因为 map 实际上从未设置动画。

IE 如果我在 [self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES] 上有一个完成 block ;并且在 map 动画完成之前(或者如果不需要动画则不触发)完成 block 不会触发,我会没事的。

唯一我能想到做的事情是在设置 usertrackingmode 时检查 map 是否真的需要动画,如果不需要动画我可以不设置 self.isTrackingAnimation。

想法?

最佳答案

与其在按钮按下处理程序中设置 self.isTrackingAnimation = YES;,不如实现委托(delegate)方法 regionWillChangeAnimated: 并在那里设置标志。

关于ios - 自定义按钮跟踪 MKUserTrackingMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029854/

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