如何在iOS 8上像Lyft App上的MKMapView平移手势上隐藏UINavigationItem?

时间:2015-02-13 08:34:07

标签: ios objective-c uiscrollview uinavigationcontroller mkmapview

您好,感谢您查看此问题,

我正在尝试模拟Lyft应用程序的功能。

在Lyft应用程序中,当用户在地图上平移时,底部栏与顶部的UINavigationBar一样消失。我试图在我自己的应用程序中重新创建此功能

在iOS 8上,UINavigationController上有一个属性,可让您在滚动时隐藏顶部栏。这很好,但是可以在mapview平底锅上实现相同的功能吗?

另外,在我的应用程序中,我有一个UITabBar。有谁知道如何隐藏它?

2 个答案:

答案 0 :(得分:3)

将平移手势添加到mapview并设置委托。

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
pan.delegate = self;
[self.mapView addGestureRecognizer:pan];

实施手势委托并返回YES。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

在手势选择器

-(void)pan:(UIPanGestureRecognizer*)ges
{
    [self.navigationController setNavigationBarHidden:1 animated:1];
    [self.tabBarController.tabBar setHidden:YES];
}

答案 1 :(得分:1)

MKMapView的这些委托方法看起来也非常有用!这很好,因为你很可能已经实现了MKMapView委托!

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

然后你可以隐藏

[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.tabBarController.tabBar setHidden:YES];

并取消隐藏

[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.tabBarController.tabBar setHidden:NO];