Loz*_*Loz 48 cocoa-touch uiview nslayoutconstraint
我有一个UIView子类绘制一个半径变化的圆(具有漂亮的弹性动画).视图决定了圆的大小.
我希望这个UIView子类更改其帧大小以匹配圆半径的动画更改,并且我希望这些更改可以修改连接到视图的任何NSLayoutConstraints(以便限制到圆的边缘的视图将移动为圈调整大小).
我理解半径更改时实现-(CGSize)intrinsicContentSize和调用invalidateIntrinsicContentSize将告诉约束更新,但我无法弄清楚如何动画更改intrinsicContentSize.
invalidateIntrinsicContentSize从[UIView animateWith ...块]中调用只是立即更新布局.
这是否可能,是否有解决方法/更好的方法?
sti*_*igi 60
invalidateIntrinsicContentSize适用于动画和layoutIfNeeded.您唯一需要考虑的是,更改内在内容大小会使superview的布局无效.所以这应该工作:
[UIView animateWithDuration:0.2 animations:^{
[self invalidateIntrinsicContentSize];
[self.superview setNeedsLayout];
[self.superview layoutIfNeeded];
}];
Run Code Online (Sandbox Code Playgroud)
对我有用的@stigi 答案的Swift版本:
UIView.animate(withDuration: 0.2, animations: {
self.invalidateIntrinsicContentSize()
self.superview?.setNeedsLayout()
self.superview?.layoutIfNeeded()
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10005 次 |
| 最近记录: |