ios - UIView.animate 不能在 swift 中正常工作
问题描述
我有一个动画视图的 y 位置的功能。我以两种方式调用此函数,首先作为按钮的操作目标,其次通过观察通知。在第一种情况下它可以工作,但在第二种情况下,当它被通知调用时,它不会动画。功能代码为:
func showResult() {
resultMode = true
self.containerView.frame.origin.y = CGFloat(1000)
self.view.layoutIfNeeded()
UIView.animate(
withDuration: 3,
animations: {
self.containerView.frame.origin.y = CGFloat(200)
self.view.layoutIfNeeded()
} ,
completion: nil
)
}
它被称为:
NotificationCenter.default.addObserver(self, selector: #selector(self.showResult), name: NSNotification.Name(rawValue: "SHOWRESULT"), object: nil)
和
resultBtn.addTarget(self, action: #selector(self.showResult), for: .touchUpInside)
解决方案
尝试在主线程上触发通知
DispatchQueue.main.async {
NotificationCenter.default.addObserver(self, selector: #selector(self.showResult), name: NSNotification.Name(rawValue: "SHOWRESULT"), object: nil)
}
原因:
定期通知中心在发布通知的线程上发送通知。分布式通知中心在主线程上传递通知。有时,您可能需要在由您而不是通知中心确定的特定线程上传递通知。例如,如果在后台线程中运行的对象正在侦听来自用户界面的通知,例如窗口关闭,您希望在后台线程而不是主线程中接收通知。在这些情况下,您必须捕获在默认线程上传递的通知并将它们重定向到适当的线程。
推荐阅读
- javascript - 我正在尝试编写一个名为oddsUpTo 的程序,该程序返回一个数组,其中每个奇数最多为给定数字
- reactjs - 当 useCallback 似乎没有帮助时,如何解决“React Hook useEffect 缺少依赖项...”。我需要将我的 API_KEY 添加为依赖项
- java - 如何在 Kotlin/Java 中对相同的方法调用进行排队
- python-3.x - Python __ror__ 和 dict 项上的其他二进制方法?
- html - 影响 CSS 中其他元素的 Transition 属性
- c# - 我已经在 Visual Studio 中安装了包 Microsoft.Graph.Beta 但无法导入它
- python - 在结果之后处理来自 read_sql_query 的空数据帧和块大小
- android - 如何从另一个应用程序在 Zoom Room 应用程序中加入会议
- python - 如何使用 Beautiful Soup 从 Google 表单中提取“entry.id”?
- kubernetes - 在 Windows 上降级 minikube 版本