在横向模式下使用 UIViewAnimationTransitionFlipFromLeft 的 iPhone 翻转动画

标签 iphone uiview core-animation uiviewanimation uiviewanimationtransition

我正在开发一款 iPhone 应用程序,其中实现了一个动画 UIViewAnimationTransitionFlipFromLeft。在这里,我的应用程序在肖像模式下运行良好。它正在执行与指定的从左到右翻转相同的动画。

但是当我在横向模式下执行此 UIViewAnimationTransitionFlipFromLeft 时,它不会从左向右旋转。相反,它是从上到下旋转。这是一个非常关键的问题。你能帮我解决这个问题吗?

我用于 iPhone 应用程序旋转 View 的代码如下:

   CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view.window cache:NO];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:1.0];
    [UIView commitAnimations];
    [self.navigationController pushViewController:objSecond animated:YES];

谢谢, 此致, 古普里辛格·塞尼

最佳答案

如果您使用的是 iOS 4.0 或更高版本,以下内容将完全满足您的要求(我刚刚对其进行了测试以确保)

NewView *myNewView = [[NewView alloc] initWith.....];
[UIView transitionFromView:self.view toView:myNewView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
//[self.navigationController pushViewController:myNewView animated:NO];
[myNewView release];

编辑:我对上面的代码做了一些更改(没有什么新内容,只是注释掉导航 Controller ,因为这不是必需的)。

所以有几种方法可以解决这个问题(就跟踪下一个 View 而言),但这是我能想到的最简单的方法。您已经可以从 View 1 切换到 View 2,因此我将解释如何从 View 2 切换到 View 10(或您需要的任意数量)。

基本上, View 转换持续的时间太长,viewDidLoad 无法捕获转到下一个 View 的调用。所以我们需要做的是设置一个定时器等待并发送一个方法在稍后的时间进行切换。这就是您将在 View 2(以及 View 3 和 View 4 等)中看到的代码。

- (void)viewDidLoad {
    // this gets called before animation finishes, so wait;
    self.navigationController.delegate = self;
    // you will need to set the delegate so it can take control of the views to swap them;
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(switchView) userInfo:nil repeats:NO];
}

我只等待 1 秒,直到调用 switch 方法,但如果您要在 View 中加载大量内容,您可能需要等待更长的时间。 1.5 秒应该足够了,但是您可以尝试一下,看看它在哪里起作用,在哪里不起作用。

接下来,您必须在 switchView 方法中调用下一个 View 。

- (void)switchView {
    NextView *myNextView = [[NextView alloc] initWith ... ];
    [UIView transitionFromView:self.view toView:nextView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
    [nextView release];
}

这对我来说非常有效。为了确保获得新 View ,我为每个 View 分配了标签,并在每个 View 的 viewDidLoad 方法中添加了 UILabels 作为 subview ,并且每个 View 都显示了其 View 的编号。所以希望这就是您所需要的。我确信您需要做更复杂的事情,但这将为您提供获得所需外观所需的动画和逻辑。 (顺便说一句,这样做时 viewDidAppear 似乎没有被调用,因此如果您确实需要使用它,可能需要从 viewDidLoad 手动调用它,但除此之外它工作正常)

关于在横向模式下使用 UIViewAnimationTransitionFlipFromLeft 的 iPhone 翻转动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703742/

相关文章:

iphone - 如何执行转场

ios - 使用条码角创建 CGRect?

ios - UICollectionVIew:滚动时动画单元格

objective-c - 如何使用 CFNetwork 从套接字获取字节数组?

iphone - TTStyledText 中的 URL 和图像

iphone xml-rpc utf8 字符串

ios - Thread 1 : EXC_BAD_ACCESS (code=1, address=0x20) 当subView

iphone - 在矩形内查找 subview

ios - 如何在 iOS 中正确变形文本?

ios - animationDidStop 方法的多个 CAAnimations?