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 问题

对于在 UIView.animate 块内部或外部的循环?

UIView.animate 在 UIPanGestureRecognizer 中时在框架上

UIView.animate 和完成问题

在UIPanGestureRecognizer中的框架上的UIView.animate

iOS Swift UIView 动画跳回到开头