iOS创建滑动返回功能

4

我希望实现类似iOS 7中的后退手势。我对整个iOS开发还很陌生,目前正在使用以下方法。
目前我有一个平移手势来检测用户是否向后滑动,然后它只是弹出导航控制器。

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


-(void)handlePan:(UIPanGestureRecognizer *)sender{
    CGPoint tran = [recognizer translationInView:recognizer.view];
    CGPoint vel = [recognizer velocityInView:recognizer.view];
    if(vel.x > 500 && tran.x > 100){
        [self.navigationController popViewControllerAnimated:YES];
    }
}

我希望在手势拖动时,前一个视图能够跟随手指移动而不是直接调用弹出到根视图的功能。例如,

SecondViewSwiping between the viewsFirstView


3
无法使用 UINavigationController 实现此功能。你需要自己开发一个控制器导航系统(这是一个过于广泛的主题,无法在单个 stack overflow 问题中回答)。 - borrrden
该死,好吧,那很糟糕。不管怎样,你有什么链接或教程可以跟随吗? - user1838169
不行。你可以从Stevo的回答中得到大致的想法。尝试实现它,如果遇到困难,请回来提出新问题。 - borrrden
1
如果有用的话,我已经上传了一个从边缘实现滑动的示例,网址是https://github.com/robertmryan/edge-swipe-demonstration。 - Rob
此问题似乎不适合讨论,因为它涉及到NDA(保密协议)下的内容。 - Ken
3个回答

9
这需要一个自定义容器视图控制器。简单来说,您需要一个视图控制器来持有两个子视图控制器(左侧的View 1和右侧的View 2)。
您需要将一个拖动手势附加到容器视图上,当用户移动手势时,您需要计算每个子视图控制器的适当框架。例如,如果用户向右滑动,您需要将View 2向右移动,并从左侧带入View 1(必要时调用子视图控制器方法)。
手势完成后,您应该检查最终位置以及手势的最终方向,以决定应该将视图控制器放置在哪里。例如,如果您在屏幕上的View 1的90%处完成向右滑动,则应完全将View 1移到屏幕上,将View 2移出屏幕。如果您完成了50%的移动,则应使用手势的方向来决定哪个视图将保留在屏幕上。

1
使用IIViewDeckController更容易,它可以满足你的需求。IIViewDeck GitHub

0
我认为在这种情况下,您应该使用UIScrollView,将滚动视图的内容大小设置为width_of_view * numberOfViews,并将所有视图水平添加到滚动视图中。当用户滚动或在屏幕上滑动手指时,显示下一个视图。这里有一个苹果文档链接可以帮助您。不要忘记在XIB或代码中启用水平滚动。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接