手动淡入新添加的子视图?

16

我希望当通过

[self.view addSubview:someSecondaryViewController.view];

将视图添加到栈中时,该视图能够淡入。

如何使这个调用进行动画处理,以便视图可以淡入(和淡出)?

3个回答

29

在执行动画之前将 alpha 设置为零,然后将 alpha 动画化到一。

[fadingView setAlpha:0.0];
[containerView addSubview:fadingView];
[UIView beginAnimations:nil context:nil];
[fadingView setAlpha:1.0];
[UIView commitAnimations];

在移除视图之前,只需将 alpha 值动画逐渐变为零。

顺便提一下,视图层次结构更像是树而不是堆栈。

编辑:

如果在淡出视图时动画结束后没有其他清理工作,则使用以下方法:

[UIView setAnimationDelegate:fadingView];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];

如果您已经设置了didStopSelector,则在那里调用removeFromSuperview。


当我的淡出效果结束时,会发生什么?它似乎正在删除我的子视图。我希望这种情况发生,但是我应该担心内存管理吗?如果我显式添加代码来删除子视图,则动画不会显示。 - Moshe
1
使用+setAnimationDidStopSelector方法从父视图中移除fadingView - Alex Reynolds

21

在淡出动画完成后,您还可以使用块来将视图从其父视图中移除:

[UIView animateWithDuration:0.2
                 animations:^{viewOut.alpha = 0.0;}
                 completion:^(BOOL finished){[viewOut removeFromSuperview];}];

1
在Swift中... In
someSecondaryViewController.view.alpha = 0.0
self.view.addSubview(someSecondaryViewController.view)
UIView.animate(withDuration: 0.2, animations: { self.someSecondaryViewController.view.alpha = 1.0 })

Out

可以翻译为:

{{链接1:离开}}


UIView.animate(withDuration: 0.2, animations: { self.someSecondaryViewController.view.alpha = 0.0 }) { (done: Bool) in
    self.someSecondaryViewController.view.removeFromSuperview()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接