gpt4 book ai didi

objective-c - 解除ModalViewController动画之谜

转载 作者:行者123 更新时间:2023-11-29 05:03:17 26 4
gpt4 key购买 nike

我看过很多关于这个主题的帖子,但没有一个能让我清楚地了解正在发生的事情。

我设置了一个涉及两个 UIViewController 的小测试:MainController 和 ModalController。

MainController 上有一个按钮,使用以下简单代码呈现模态视图 Controller :

ModalController *myModal = [[ModalController alloc] init];
[self presentModalViewController:myModal animated:YES];
[myModal release];

现在,如果我立即从同一代码块中关闭此模态 Controller ,如下一行所示:

[self dismissModalViewControllerAnimated: YES];

模态视图不会关闭。

根据本网站上的一些建议,我将 dismissModalViewControllerAnimated 调用放在一个单独的方法中,然后使用以下方法调用:

[self performSelector:@selector(delayedDismissal) withObject:nil 
afterDelay:0.41];

这有效 - 至少如果我将延迟设置为 0.41 或更大。 .40 或更低,它不起作用。

此时,我假设我正在处理一个需要 catch 自身的运行循环,因为缺乏更好的描述。不幸的是,它不是很稳定。

因此,对于下一个测试,我让delayedDismissal什么也不做——它只是提供延迟——然后将dismissModalViewControllerAnimated回调重新插入到原始 block 中,这样我的代码现在看起来像这样:

ModalController *myModal = [[ModalController alloc] init];
[self presentModalViewController:myModal animated:YES];
[myModal release];
self performSelector:@selector(delayedDismissal) withObject:nil
afterDelay:0.41]; // to create the false delay
[self dismissModalViewControllerAnimated: YES];

...现在,无论我使用多长时间的延迟,dismissModalViewControllerAnimated 都不再起作用。

那么,这里发生了什么?我意识到,像其他人一样,我可以通过各种解决方法来实现我的目标,包括使用委托(delegate)等。但我真的认为,对于遇到此问题的每个人来说,彻底了解问题和解决问题是有好处的。这种情况的正确解决方案。顺便说一句,此场景的一个用例是以模态方式呈现加载屏幕,其中用户与该屏幕没有交互;它只是用于呈现信息,同时阻止用户采取操作。

最佳答案

View 是动画的,因此只要它是动画的,调用解雇就不起作用。

此外,在您尝试的第二件事中,您正在调用“延迟”,但您实际上正在做的是说以下内容:“好吧,这是这个可爱的方法,您可以在 0.41 秒后执行它吗?谢谢,在同时,调用这个方法..”

应该通过用户界面单击按钮来关闭模态视图 Controller ,那么您为什么要首先尝试此操作?

关于objective-c - 解除ModalViewController动画之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6327604/

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