为啥 viewDidLayoutSubviews 会干扰动画?

Posted

技术标签:

【中文标题】为啥 viewDidLayoutSubviews 会干扰动画?【英文标题】:Why does viewDidLayoutSubviews interfere with animations?为什么 viewDidLayoutSubviews 会干扰动画? 【发布时间】:2014-04-15 08:58:09 【问题描述】:

我有一个视图控制器,其中视图是手动布局的(没有 xib)。这是在viewDidLayoutSubviews 中完成的。我想为其中一个视图设置动画,但动画不起作用(视图没有可观察到的运动),因为viewDidLayoutSubviews 似乎在动画开始时立即被调用。

相关代码部分:

- (void)viewDidLayoutSubviews

    [super viewDidLayoutSubviews];
    logo.frame = CGRectMake(0, 0, 640, 360);


- (void)shrink

    [UIView animateWithDuration:0.5 animations:^logo.frame = CGRectMake(0, 0, 320, 180);];

shrink 方法在另一个计时器触发时被调用,因此在创建视图控制器时不会立即调用它。

如果我在别处设置logo.frame 并从viewDidLayoutSubviews 中删除该行,则动画可以正常工作。

对此行为的解释是什么,以及解决此问题的推荐方法是什么?

【问题讨论】:

【参考方案1】:

你试过在viewDidApper中调用动画方法吗?而不是使用viewDidLayoutSubviews 尝试使用viewDidLoad

【讨论】:

视图的整体大小 (self.view.bounds) 在调用 viewDidLoad 时不可用(我实际上需要这个来将视图定位在我真正想要的位置)。而且我不希望动画直接开始,所以不适合从viewDidAppear开始。

以上是关于为啥 viewDidLayoutSubviews 会干扰动画?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:viewDidLayoutSubviews 是啥意思?

viewDidLayoutSubviews 中的 UIImageView 宽度是 1000?

等效于 UITableViewCell 的 viewDidLayoutSubviews

需要有关 viewDidLayoutSubviews 的帮助

谁负责在自定义 UIViewController 容器中调用 viewWillLayoutSubviews()/viewDidLayoutSubviews()?

在 viewDidLayoutSubviews() 中调用地图视图函数时,地图视图显示两次?