cocoa-touch - 动画内在内容大小的变化

标签 cocoa-touch uiview nslayoutconstraint

我有一个 UIView 子类,它绘制一个半径变化的圆(带有漂亮的弹性动画)。 View 决定了圆的大小。

我希望这个 UIView 子类更改其帧大小以匹配对圆半径的动画更改,并且我希望这些更改能够修改连接到 View 的任何 NSLayoutConstraint(以便约束到圆边缘的 View 将随着圆圈大小的调整而移动)。

我知道实现 -(CGSize)intrinsicContentSize 并在半径更改时调用 invalidateIntrinsicContentSize 将告诉约束进行更新,但我不知道如何将更改动画化内在内容大小

从 [UIView animateWith... block 中调用 invalidateIntrinsicContentSize 会立即更新布局。

这是否可能,是否有解决方法/更好的方法?

最佳答案

invalidateIntrinsicContentSize 与动画和 layoutIfNeeded 配合得很好。您需要考虑的唯一一件事是,更改内在内容大小会使 super View 的布局无效。所以这应该有效:

[UIView animateWithDuration:0.2 animations:^{
    [self invalidateIntrinsicContentSize];
    [self.superview setNeedsLayout];
    [self.superview layoutIfNeeded];
}];

关于cocoa-touch - 动画内在内容大小的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154008/

相关文章:

ios - Xcode 5 iPhone 属性列表未更新

iphone - 运动的核心动画公式

iphone - 从 JSON 到 NSArray

ios - UIView 动画不动画

ios - 在 iOS 中画线时命中检测

Swift colorWithAlphaComponent() 不起作用

swift - UIView 阴影在 iphone 5s 中不显示

ios5 - iOS : Movie player view doesn't rotate

ios - 更新到 iOS8 后应用程序崩溃

ios - 用于宽度或高度约束的布局格式选项?