2016-07-29 30 views
1

我试图在需要改变视图固有尺寸的UIView子类中编排一些动画。在改变固有尺寸的同时改变NSLayoutConstraint的动画效果问题

CATransaction完成块中,我呼叫invalidateIntrinsicContentSize()来反映大小的变化,并在我制作动画约束后立即执行。

self.layoutIfNeeded() 
UIView.animateWithDuration(2) { 
    NSLayoutConstraint.deactivateConstraints(oldConstraints) 
    NSLayoutConstraint.activateConstraints(newConstraints) 
    self.layoutIfNeeded() 
} 

但奇怪的事情发生了,与提供给deactivateConstraintsactivateConstraints方法的限制一起,我也看到沿着相同的时间进行动画视图的大小。

下面是一个在行动中的视频。

https://www.youtube.com/watch?v=OgM378Wryd0

这里的问题的示意图。

enter image description here

我的目的是立即改变视图的大小,并与定位约束沿不制作动画。

+0

为什么你使用animateWithDuration方法,如果你的意图是不动画? –

+0

我的意图是动画位置,而不是大小。 –

回答

1

结束工作的一个解决方案是将最初的layoutIfNeeded()调用包装在动画块中,然后在完成时启动位置动画。

UIView.animateWithDuration(2, animations: { self.layoutIfNeeded() }) { 
    UIView.animateWithDuration(2) { 
    NSLayoutConstraint.deactivateConstraints(oldConstraints) 
    NSLayoutConstraint.activateConstraints(newConstraints) 
    self.layoutIfNeeded() 
    } 
} 

它并不十分好看,因为我不是没有实际动画大小的变化,我希望他们能立即发生。所以我仍然在寻找一个优雅的解决方案,或者说为什么不能有一个解决方案。