为啥 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()?