如果父视图正在动画,则 IOS7 子视图会被动画

Posted

技术标签:

【中文标题】如果父视图正在动画,则 IOS7 子视图会被动画【英文标题】:IOS7 Subviews get animated if their parent view is being animated 【发布时间】:2013-10-17 09:46:46 【问题描述】:

当我开始针对 ios7 进行测试时,我的一些观点遇到了一个非常奇怪的错误。看来,如果任何可以动画的属性在子视图中更改其值,而其父级正在执行动画,则该更改也会被动画化。我有以下方法:

- (void)performAnimation
   [UIView animateWithDuration:0.42
                         delay:0
                       options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState
                    animations:^
                     self.myView.contentInset = contentInset;
                 
                 completion:NULL];

与此同时,我在该视图上的 layoutsubviews 函数被调用,它更新了一些子视图的位置。

-(void)layoutSubviews
      self.someSubview.frame = CGRectMake(10,20,30,40);

在 iOS5/6 中,变化是瞬间发生的,但在 iOS7 中,它会变成动画,因此您可以看到我的子视图从初始位置缓慢移动到最终位置。有什么想法吗?

【问题讨论】:

有点奇怪的是你为contentInset制作了动画。由于:developer.apple.com/library/ios/documentation/uikit/reference/… 你使用autolayout 吗? 【参考方案1】:

我终于弄明白了。在IOS7中他们引入了一个新功能

+ (void)performWithoutAnimation:

我只是将我的代码包装在其中的 layoutSubviews 中,不需要的动画就消失了。

【讨论】:

太棒了,当一堆视图被移动时,我在 iOS 7 中遇到了类似的新动画抖动问题。必须做同样的事情并进行一些更改并从中删除动画。

以上是关于如果父视图正在动画,则 IOS7 子视图会被动画的主要内容,如果未能解决你的问题,请参考以下文章

带有自动布局的新子视图的 iOS 7+ 缩放动画

在视图动画时调用 setVisibility

iPhone:管理视图动画到异步事件

iOS - 子视图不使用帧更改进行动画处理

stackview 动画 - 排列的子视图的折叠

iOS7 push/pop转场动画