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];
    }
}

我希望前一个视图跟随平移手势上的手指,而不是仅仅调用 pop 到 root。例如,

第二视图在视图之间滑动第一视图

4

3 回答 3

9

这将需要一个自定义容器视图控制器。简单来说,您有一个视图控制器,其中包含 2 个视图控制器(左侧的视图 1 和右侧的视图 2)。

您将平移手势附加到容器视图,当用户移动时,您会为每个子视图控制器计算适当的帧。例如,如果用户向右平移,您会将视图 2 移到右侧,并将视图 1 从左侧移入(根据需要调用子视图控制器方法)。

当手势完成时,您应该结合平移的最终方向检查最终位置,以决定您应该放置视图控制器的位置。例如,如果您在屏幕上视图 1 的 90% 处完成向右平移,您应该将视图 1 完全移动到屏幕上,并将视图 2 移出屏幕。如果你完成了每个的 50%,你应该使用平移的方向来决定哪个视图将保留在屏幕上。

于 2013-07-10T07:37:38.897 回答
1

IIViewDeckController起来更简单,做你想做的 事 IIViewDeck GitHub

于 2013-07-10T07:52:18.643 回答
0

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

于 2013-07-10T07:58:47.460 回答