自定义背景在视图更改时没有动画

Posted

技术标签:

【中文标题】自定义背景在视图更改时没有动画【英文标题】:custom backgrounds not animating on view change 【发布时间】:2012-04-16 20:44:32 【问题描述】:

我的标准视图和我在

中声明的分组 uitableview 有自定义背景

//RooViewController

- (void)viewWillAppear:(BOOL)animated

    [self.navigationController setNavigationBarHidden:YES animated:NO]; //Hides the navigation bar

    //Add custom background
    self.view.backgroundColor = [UIColor clearColor];
    self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]];

    [super viewWillAppear:animated];

//GroupedTableviewController

- (void)viewWillAppear:(BOOL)animated
      
    //Add custom background
    self.tableView.backgroundColor = [UIColor clearColor];
    self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bgplain.png"]];

    [super viewWillAppear:animated];

与此有关的事情是视图只是消失并重新出现,但视图之间会发生动画从左向右滑动...如何将这些自定义背景添加到此视图更改动画中?

【问题讨论】:

【参考方案1】:

您需要设置正在出现的视图的背景视图,而不是父视图控制器的视图。通过设置父视图控制器的视图,您实际上是在切换该视图(不会动画),而出现的视图控制器的视图(显然是清晰的)是动画的。相反,添加背景视图到出现的视图控制器视图,或者在你的情况下,只需设置颜色:

self.view.backgroundColor = UIColor colorWithPatternImage:[UIImage imageNamed:@"bgplain.png"]];

我还注意到您在根视图控制器中更改了 parentView 的背景视图,这意味着父视图可能是 UINavigationView(也根据您的评论)。一般来说,您不应该更改 navigationController 的视图特性,主要是因为它旨在容纳其他视图/控制器,而不是显示自己的视图(当然,除了导航栏)。

所以我认为你不应该在每个视图控制器中使用 self.parentViewController.view 并坚持使用 self.view

【讨论】:

感谢您的回复.. 这几乎符合我的需求.. 但是我想我应该提到 tableview 也在导航控制器内.. 这个解决方案与导航控制器栏混淆了。当视图随动画变化时,条形变为白色 我已经对我的回答添加了一些说明。看看有没有帮助。 好吧,很酷,我明白你的意思.. 有点,我的意思是这是一个有点令人困惑的话题。我开始对两个视图都使用 self.view .. 但是听起来我可能不应该改变东西.. 关于导航控制器,我已经在 appdelegate "MainWindow.xib" 中声明了这一点 视图控制器在您刚开始时可能是一个令人困惑的主题。访问 self.view 非常好。但是,如果您使用 IB 创建这些视图,则在此处设置所有背景视图特征会比在代码中更容易。老实说,我从不使用 IB(我总是用代码创建视图控制器),但坚持使用其中一个通常是个好主意。我也强烈推荐阅读这篇文章……全部内容:developer.apple.com/library/ios/#featuredarticles/… 谢谢,看起来不错。。我已经阅读了开发者库中的一些文章,但不是这一篇。。感谢您指出 :)

以上是关于自定义背景在视图更改时没有动画的主要内容,如果未能解决你的问题,请参考以下文章

动画边界更改时具有 CALayer 有线效果的自定义视图

如何使带有自定义背景图像的按钮在Android中显示点击动画

带有动画更改的自定义进度对话框的大小

iOS 8 自定义视图控制器演示:在动画期间更改呈现的 VC 的大小

可可objective-c:更改自定义视图的背景颜色

当我为自定义视图设置动画时,视图的高度会发生变化