UIView.animate 不在一个功能上制作动画
Posted
技术标签:
【中文标题】UIView.animate 不在一个功能上制作动画【英文标题】:UIView.animate not animating on one function 【发布时间】:2020-08-27 08:03:38 【问题描述】:我有两个为UIView
设置动画的函数。一个是显示它,另一个是关闭视图。奇怪的是显示视图的动画正在工作,但关闭的动画却没有。
show()
在视图被添加为子视图后立即被调用。
func show()
self.viewContainer.frame.origin.y = self.view.frame.height + 500
UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations:
self.viewContainer.frame.origin.y = self.view.frame.height
, completion: nil)
虽然使用UITapGestureRecognizer
或按下按钮调用dismiss()
。
func dismiss()
self.overlay.isHidden = true
self.viewContainer.frame.origin.y = self.view.frame.height
UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations:
self.viewContainer.frame.origin.y = self.view.frame.height + 500
) (_) in
self.view.removeFromSuperview()
这里似乎有什么问题?
【问题讨论】:
【参考方案1】:你可以试试这个
func dismiss()
UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations:
self.viewContainer.frame.origin.y = self.view.frame.height + 500
self.overlay.isHidden = true
, completion: nil)
【讨论】:
我已经尝试过了,但它仍然没有动画 没用。我也尝试将它放在 DispatchQueue.main.async 中,但它仍然会在没有动画的情况下关闭 好的,@DavidMempin 检查上面并注意您正在为某些内容设置动画并隐藏其他内容 删除 self.view.removeFromSuperview() 无济于事,因为我需要在动画后立即删除子视图。 然后添加它并尝试一下@DavidMempin【参考方案2】:在 dissmis() 中删除这段代码
self.viewContainer.frame.origin.y = self.view.frame.height
为什么要在 show() 中这样做?
self.viewContainer.frame.origin.y = self.view.frame.height
如果你想显示在中心使用
self.viewContainer.center.y = self.view.center.y
【讨论】:
【参考方案3】:通过动画视图的底部约束而不是其框架来修复它。
UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations:
self.viewBottomConstraint.constant = -500
self.view.layoutIfNeeded()
) (_) in
self.view.removeFromSuperview()
从中得到提示:https://***.com/a/52378252/9629494
【讨论】:
以上是关于UIView.animate 不在一个功能上制作动画的主要内容,如果未能解决你的问题,请参考以下文章
UIView.animate 在 UIPanGestureRecognizer 中时在框架上