- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在让 UIViewController 消失之前使用动画隐藏导航栏。因此我实现了以下内容:
-(void) viewWillDisappear:(BOOL) animated {
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationCurveEaseOut
animations:^{
[self.navigationController setNavigationBarHidden:YES];
}
completion:^(BOOL finished){
NSLog(@"animation finished");
}];
[super viewWillDisappear:animated];
}
问题是 viewWillDisappear 会继续执行并返回,整个 View 会在动画结束前消失。我怎样才能阻止方法在动画完成之前返回(打印“动画完成”的地方)。
最佳答案
viewWillDisappear:animated
本质上是一个礼貌的通知。它只是在它发生之前告诉你即将发生的事情。您实际上无法阻止或延迟 View 的消失。
您最好的解决方案是在 UINavigationController
上创建一个类别,该类别创建诸如(未测试)的方法:
- (void)pushViewControllerAfterAnimation:(UIViewController *)viewController animated:(BOOL)animated {
[UIView transitionWithView:viewController.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationCurveEaseOut
animations:^{
[self.navigationController setNavigationBarHidden:NO];
}
completion:^(BOOL finished){
NSLog(@"animation finished");
[self pushViewController:viewController animated:animated];
}];
}
- (void)popViewControllerAfterAnimationAnimated:(BOOL)animated {
[UIView transitionWithView:self.visibleViewController.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationCurveEaseOut
animations:^{
[self.navigationController setNavigationBarHidden:YES];
}
completion:^(BOOL finished){
NSLog(@"animation finished");
[self popViewControllerAnimated:animated];
}];
}
然后你可以调用这些而不是
- (void)pushViewControllerAfterAnimation:(UIViewController *)viewController animated:(BOOL)animated
和
- (void)popViewControllerAfterAnimationAnimated:(BOOL)animated
分别。
关于iphone - 如何等待动画在 viewDidDisappear 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071386/
我正在重构 3 年多前某人为 iOS 编写的一些 Objective-C 代码。我看到 viewDidDisapppear: 方法被这样覆盖了: - (void)viewDidDisappear:(B
我正在使用下拉菜单,想要实现与选项卡栏相同的行为。比如我想随时切换vc1,vc2,vc3并保留原始数据。我所做的是使用 willMoveToParentViewController。 func
我使用 startApp 来显示广告,但当 View 消失时,它不会显示广告。我在 viewDidLoad() 中有 startAppAd = STAStartAppAd() 我不太确定出了什么问题。
我花了几天时间试图解决以下问题,但我没有得到任何结果:( 我有一个带有 UIScrollView 和一些 subview 的 viewController,我通过界面生成器添加其中一些,通过代码添加其
在普通 View 生命周期中调用 viewDidDisappear 时,执行与 UX 相关的项目是否安全? 换句话说,我是否应该先检查我是否在主线程上? 最佳答案 除非 View Controller
iOS 11.2、Xcode 9.2 我已经尝试了所有方法在旧 UIViewController AFTER 新 UIViewController 的 viewDidDisappear 上关闭键盘>
我在一个应用程序上工作,我的 View 有问题 [Will/Did]Disappear 方法在返回到应用程序时没有被触发。 情况是,我有 UINavigationController,它上面有两个 V
我对 Objective C 还是很陌生,我想知道有关 viewDidDisappear 的一些事情。我有一个播放声音的应用程序(使用 AVAudioPlayer),我想在切换 View 时停止声音。
我在主视图中添加了这样的 subview : BTLPXYPad *XYPad = [[BTLPXYPad alloc] initWithFrame: CGRectMake (30, 10,
我需要知道我的 UITableViewCell 何时在我的 UITableViewCell 中被删除以使计时器无效。 在单元格消失之前调用什么方法(就像 viewController 生命周期中的 V
我想在让 UIViewController 消失之前使用动画隐藏导航栏。因此我实现了以下内容: -(void) viewWillDisappear:(BOOL) animated { [UIV
我不明白什么时候应该在 viewDidUnload 和 viewDidDisappear 中实现某些东西。两者有什么区别? 例如,当 View Controller 从 View 层次结构中移除时,我
这是之前 Unresolved 帖子的后续内容。我在 TableView 中有一个导航 Controller 、一个 TableView Controller 和一个搜索栏。所有这些都内置在 Stor
这是日志输出 2013-03-16 14:02:59.301 Echo[65406:4503] child viewWillDisappear start 2013-03-16 14:02:59.30
我正在使用 MonoTouch。当我将一个新 Controller 插入 UINavigationController 的堆栈时,它工作正常。当我点击后退按钮时,没有事件触发,即使在视觉上, View
我正在尝试从 UIViewController 的 viewDidDisappear 中的 UIWebView 本地文件重新加载内容。 Badaccess 被捕获。但如果我在 viewWillDisa
当我退出应用程序时,我希望调试器在 Root View Controller 中的 viewDidDisappear 或 dealloc 停止。但是调试器不会转到断点。如何让调试器在断点处停止或打印
我为 PopoverController 创建了自己的类(没有子类化 UIPopoverController)以我想要的方式呈现 ViewController。 CustomPopoverContro
我有一个 UIViewController 有这个方法: - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear
我想知道 viewWillDisappear: 和 viewDidDisappear: 是否在 iOS 切换应用程序时被调用(例如,用户按下主页按钮)。这会导致 View 从屏幕上消失,但是是否为此调
我是一名优秀的程序员,十分优秀!