带有 ViewWillLayoutSubview 的 IOS 动画
<p><p>我的 <code>viewController</code> 中有这个动画可以缩小并向下滑动我的菜单。</p>
<pre><code>-(void)dismissMenuWithAnimation
{
CGRect originalFrame = self.view.frame;
[UIView animateWithDuration:2
animations:^{
self.view.frame = CGRectMake(originalFrame.origin.x,originalFrame.origin.y+originalFrame.size.height,originalFrame.size.width,10);
}
completion:^(BOOL finished){
;
self.view.frame = originalFrame;
}];
}
</code></pre>
<p>在同一个 <code>viewController</code> 中,我将覆盖 <code>viewWillLayoutSubviews</code>:</p>
<pre><code>-(void)viewWillLayoutSubviews
{
;
CGRect viewBounds = self.view.bounds;
self.subView1.frame = CGRectMake(self.menuItemMidPosition,viewBounds.size.height-SUBVIEW1_HEIGHT,SUBVIEW1_WIDTH,SUBVIEW1_HEIGHT);
}
</code></pre>
<p>我有几个 subview 的框架是在这个 <code>viewWillLayoutSubviews</code> 方法中设置的。没有在 viewDidLoad 中设置它,因为那时框架仍然不正确。 </p>
<p>问题是,当我关闭菜单时,首先调用动画 block ,并且不知何故 self.view.frame 立即设置为高度 10。(缩小的帧)。当它到达 viewWillLayoutSubviews 时,边界高度为 10。这导致我的其他 subview 显示不正确。 </p>
<p>这似乎很愚蠢,但我不知道如何解决这个问题。有人可以帮忙吗?谢谢。 </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我遇到了和作者一样的问题。虽然这个问题很老,但我会发布我的解决方案,希望有人会像我一样碰到这个问题。 </p>
<p><strong>解决方案</strong>非常简单,完全类似于基于自动布局的动画:</p>
<pre><code>UIView.animate(
withDuration: 0.2,
delay: 0,
options: .curveEaseInOut,
animations: {
// This will launch viewWillLayoutSubviews!
self.view.setNeedsLayout()
self.view.layoutIfNeeded()
},
completion: nil)
</code></pre>
<p>和 Objective-C 版本:</p>
<pre><code>[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
// This will launch viewWillLayoutSubviews!
;
;
}
completion:nil];
</code></pre>
<p>我喜欢完全程序化的布局,尽管我们在 2017 年有了自动布局引擎。</p></p>
<p style="font-size: 20px;">关于带有 ViewWillLayoutSubview 的 IOS 动画,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/13132321/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/13132321/
</a>
</p>
页:
[1]