2

我正在尝试一个简单的项目(故事板),用户从右向左滑动以进入下一个视图,依此类推,然后用户从左向右滑动。我想实现跟随滑动的过渡(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];

}

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

解释:

当我在横向(我的项目只在横向工作)并且主页按钮在左侧时,动画来自顶部!当我在横向并且主页按钮在右侧时,动画来自底部!!!

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

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

4

2 回答 2

0

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

我检查了 iPad 的方向,然后不是向左或向右,我实际上是在顶部/底部……好吧,我就是这样做的,虽然非常不正统。

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

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

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

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

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

}
于 2013-02-17T21:13:57.483 回答
0

您的视图在导航控制器中吗?您是否尝试过简单地使用带有“推送”风格的 segue?

在您的滑动手势识别器中,只需调用:

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

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

于 2013-02-17T21:33:20.863 回答