gpt4 book ai didi

objective-c - 滚动 MKMapView 时淡出弹出窗口

转载 作者:行者123 更新时间:2023-11-29 04:43:13 25 4
gpt4 key购买 nike

我有一个基于 MKMapView 的应用程序,带有按钮栏,当用户在 map View 上选择注释时,可以使用按钮来显示按钮栏上的弹出窗口。

弹出窗口仅覆盖 map View 的一部分,我想要做的是,当用户滚动弹出窗口后面的 map View 的可见部分时,我希望弹出窗口淡出以显示其后面的 map View ,当用户停止滚动时,我希望弹出框在一秒钟左右后再次淡入。

我知道我可以定义我仍然希望能够在弹出窗口结束时与之交互的 View ,但是处理淡入淡出的最佳方法是什么?

谢谢,标记

最佳答案

要知道用户何时拖动 map ,您需要 delegate on the MKMapView ,并响应regionWillChangeAnimated和regionDidChangeAnimated。文档声称这些可能在拖动过程中被多次调用,但我没有看到这种情况发生。

但是,请参阅this discussion of these delegate methods not being called reliably .

编辑:我最初的答案建议使用核心动画来淡出弹出窗口,但这是不可行的。看看评论。即使您获取了弹出窗口的 contentViewController,并获取了其 view,并更改了该 View 的 alpha,弹出窗口也会留下阴影,除非您进行搜索层层次结构。如果可能的话,请关闭呈现弹出窗口。这可能不如 Core Animation 方便,因为您可能需要一个 NSTimer 来控制恢复之前的延迟。

对于 map View 之上的其他 View ,一旦您知道何时发生拖动,请使用核心动画淡出弹出窗口并再次淡入。调整 View 的持续时间、延迟和名称以适应淡入淡出。

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
{
[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^
{
[[self viewOnTopOfMapView] setAlpha:0.0];
}
completion:nil];
}

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
{
[UIView animateWithDuration:0.25 delay:2.0 options:UIViewAnimationOptionAllowUserInteraction animations:^
{
[[self viewOnTopOfMapView] setAlpha:1.0];
}
completion:nil];
}

关于objective-c - 滚动 MKMapView 时淡出弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10042864/

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