gpt4 book ai didi

objective-c - 使用 transitionFromView 使用自定义 segue 动画调用 viewWillAppear 两次

转载 作者:可可西里 更新时间:2023-11-01 03:07:13 25 4
gpt4 key购买 nike

我正在寻找一个 segue 来用另一个使用 curl 动画的 View Controller 替换窗口的 Root View Controller 。我的想法是,在转换 (performSegueWithIdentifier:) 到下一个 LoginViewController 之前,我有一个显示几秒钟的 SplashViewController,使用 curl 动画。

我创建了一个名为 AnimatedSegue 的自定义 UIStoryboardSegue 类。以下是重写的 perform 方法的代码:

- (void)perform
{
UIViewController *source = self.sourceViewController;
UIViewController *destination = self.destinationViewController;

UIWindow *window = source.view.window;

[UIView transitionFromView:source.view
toView:destination.view
duration:1.0
options:UIViewAnimationOptionTransitionCurlUp
completion:^(BOOL finished) {
[window setRootViewController:destination];
}];
}

除了在 iOS 6 中(显然不是在 iOS 5 中),viewWillAppear: 方法在 destination View Controller 上被调用两次外,它工作正常。似乎它在转换期间第一次被调用,第二次在执行 [window setRootViewController:destination];

时被调用

请注意,我不想使用导航 Controller 。转换结束后,SplashViewController 将被释放(如预期)。

关于如何解决我的问题有什么想法吗?

最佳答案

回答我自己的问题,以防它可以帮助别人......

我最终使用了 Core Animation CATransition类来创建 segue 的动画而不是 UIView 的动画方法。

下面是我的新 perform 方法的样子:

- (void)perform
{
UIViewController *source = self.sourceViewController;
UIWindow *window = source.view.window;

CATransition *transition = [CATransition animation];
[transition setDuration:1.0];
[transition setDelegate:self];
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[transition setType:@"pageCurl"];
[transition setSubtype:kCATransitionFromBottom];

[window.layer addAnimation:transition forKey:kCATransition];
[window setRootViewController:self.destinationViewController];
}

关于objective-c - 使用 transitionFromView 使用自定义 segue 动画调用 viewWillAppear 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12941169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com