自定义Segue推动奇怪的行为

时间:2013-02-17 10:43:07

标签: iphone sdk uigesturerecognizer uistoryboard

我正在尝试一个简单的项目(故事板),用户从右向左滑动以进入下一个视图,依此类推,并从左到右返回用户滑动。 我希望实现过渡以跟随滑动(L - > R或R - > L)。

我发现了这个:

-(void)perform {

    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
    UIViewController *destinationController = (UIViewController*)[self destinationViewController];

    CATransition* transition = [CATransition animation];
    transition.duration = .25;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom



    [sourceViewController.navigationController.view.layer addAnimation:transition
                                                                forKey:kCATransition];

    [sourceViewController.navigationController pushViewController:destinationController animated:NO];

}

但这似乎没有做应该做的事。

说明:

当我在风景中(我的项目仅在风景中工作)并且主页按钮在左侧时,动画来自TOP !!! 当我在横向和主页按钮在右边时,动画来自BOTTOM !!!

虽然我已将其指定为从左侧开始。 另一件事是,当我使用不同的风景(左边或右边的按钮)时,它会改变方向。

任何想法为什么会发生这种情况?

2 个答案:

答案 0 :(得分:0)

好的,这就是我做的,虽然非常不正统。

我正在检查iPad的方向,而不是向左或向右移动实际上是顶部/底部... 好吧,这就是我做到的,虽然非常不正统。

我正在检查iPad的方向,然后不是向左或向右移动实际上是顶部/底部......

if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft)
{
      //Landscape Left

//.......
       transition.subtype = kCATransitionFromTop;

}
else if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight)
{
      //Landscape Right

//......
       transition.subtype = kCATransitionFromBottom;

}

答案 1 :(得分:0)

您的视图是否在导航控件中? 您是否尝试过使用“推”式的segue?

在滑动手势识别器中,只需致电:

[self performSegueWithIdentifier:@"NextScreenIdentifier" sender:sender];

你应该得到正确的行为(左 - >右/右 - >左转)。