gpt4 book ai didi

ios - 如何关闭带有淡出动画的模态 VC?

转载 作者:IT王子 更新时间:2023-10-29 08:16:48 24 4
gpt4 key购买 nike

我在呈现的 VC 中使用以下代码淡入子模态 VC,效果很好:

self.infoViewController.view.alpha = 0.0;
[self.navigationController presentModalViewController:self.infoViewController animated:NO];
[UIView animateWithDuration:0.5
animations:^{self.infoViewController.view.alpha = 1.0;}];

但是我无法让它淡出,我尝试了一些方法,这是我尝试过的最新方法,但它不起作用:

- (IBAction)dismissAction:(id)sender
{
if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)])
{
[[self parentViewController] dismissModalViewControllerAnimated:YES];
self.parentViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.parentViewController.view.alpha = 0.0;
[UIView animateWithDuration:0.5
animations:^{self.parentViewController.view.alpha = 1.0;}];
} else
{
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
self.presentedViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.presentedViewController.view.alpha = 0.0;
[UIView animateWithDuration:0.5
animations:^{
self.presentedViewController.view.alpha = 1.0;}];
}

模态视图 Controller 会立即淡出,而不是像显示时那样经过一段时间。

最佳答案

这(原始部分)并不是要从 H2CO3 的正确答案中拿走。 UIModalTransitionStyleCrossDissolve 几乎完全符合您正在寻找的效果。您只是在为时已晚之前才设置 modalTransitionStyle 。在相应位置用这些函数替换所有代码:

-(void)show{
self.infoViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:self.infoViewController animated:YES];
}
- (IBAction)dismissAction:(id)sender{
[self dismissModalViewControllerAnimated:YES];
}

针对时间问题进行编辑:让我们谈谈有问题的代码。我们将只关注 if true 部分,因为它在本质上与 else 相同。

[[self parentViewController] dismissModalViewControllerAnimated:YES];
self.parentViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.parentViewController.view.alpha = 0.0;
[UIView animateWithDuration:0.5
animations:^{self.parentViewController.view.alpha = 1.0;}];

如果您正在寻找互惠动画,这不是它。在您的原始动画中,您将下一个 View 的 alpha 设置为 0,然后呈现下一个 View Controller ,然后将其 View 的 alpha 设置为 1。因此从逻辑上讲,您需要在动画结束后关闭 View Controller ;这真的很容易使用 block 。代码看起来像这样:

[UIView animateWithDuration:0.5 animations:^{
self.view.alpha = 0;
} completion:^(BOOL b){
[self.presentingViewController dismissModalViewControllerAnimated:NO];
self.view.alpha = 1;
}];

这行代码将 View 的 alpha 动画设置为 0,然后(完成后)关闭呈现的 View Controller ,并将 View 的 alpha 设置回 1。这是一个交互动画。

关于ios - 如何关闭带有淡出动画的模态 VC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8956981/

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