我有一个带有按钮栏的基于MKMapView的应用程序,当用户在地图视图上选择一个注释时,一个按钮可用于显示按钮栏中的弹出窗口。
popover只覆盖地图视图的一部分我想要做的是当用户滚动popover后面的地图视图的可见部分时我希望popover淡出以显示它后面的地图视图,当用户停止滚动时,我希望弹出窗口在一秒左右后再次淡入。
我知道我可以定义视图,我仍然希望能够在弹出窗口结束时进行交互,但是最好的方法是什么呢?
谢谢, 标记
答案 0 :(得分:1)
要知道用户何时拖动地图,您需要delegate on the MKMapView,并回复regionWillChangeAnimated和regionDidChangeAnimated。文档声称在拖动过程中可能会多次调用这些文件,但我看不到这种情况。
但是,请参阅this discussion of these delegate methods not being called reliably。
编辑:我的原始答案建议使用Core Animation淡化弹出窗口,但这是不可行的。查看评论。即使您获得了popover的contentViewController
并获得其view
,并更改了该视图的alpha
,弹出窗口也会留下阴影,除非您搜索图层层次结构。如果可能的话,dismiss
和present
代替popover。这可能不如Core Animation方便,因为您可能需要NSTimer
来控制延迟才能恢复。
对于地图视图顶部的其他视图,一旦知道何时进行拖动,请使用Core Animation将弹出窗口淡出并重新打入。调整视图的持续时间,延迟和名称以淡化以适应。
- (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];
}