来自应用程序委托的停止动画 activity 指示器
stopAnimating activity indicator from app delegate
我无法从我的应用程序委托中的函数停止 activity 指示器,我知道该函数正在被调用,但我在日志中没有收到任何错误。
我正在我的 signInViewController 中创建 activityIndicator,就像这样
@IBAction func googleSignInButton(_ sender: Any) {
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().signIn()
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.white
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.shared.beginIgnoringInteractionEvents()
}
在我的应用程序委托中我有这个功能,
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
print("this function is running")
SignInViewController().stopanimating()
// ...
if error != nil {
// ...
return
}
我知道这个函数工作正常,因为它在日志等中打印文本。并从 SignInViewController
调用此函数
func stopanimating() {
print("stop animating function running")
DispatchQueue.main.async {
self.activityIndicator.stopAnimating()
UIApplication.shared.endIgnoringInteractionEvents()
}
}
现在我知道这个函数是 运行,因为它还在日志中打印预期的文本,而且 endIgnoringInteractionEvents 确实有效,但 activity 指标仍然是 运行
我是 swift 的新手,但我之前在通过我的 appdelegate 操作视图控制器中的对象时遇到了问题,这可能吗?
提前致谢
您需要从子视图中删除 activity 指示器。
修改你的 stopanimating()
func stopanimating() {
print("stop animating function running")
DispatchQueue.main.async {
self.activityIndicator.stopAnimating()
self.activityIndicator.removeFromSuperview()
UIApplication.shared.endIgnoringInteractionEvents()
}
}
这是因为您正在 appDelegate 中创建 SignInViewController 的新实例。即SignInViewController().stopanimating()
。您必须调用相同的实例才能停止动画显示 activity 指示器。
这是什么意思 -- SignInViewController()
。这意味着您正在创建 SignInViewController
的不同实例,因此在此实例中您的 Activity 指标不存在。
解决方案 - 第一个解决方案是获取显示 activity 指标的实例。这意味着您必须在您的情况下获得 currentViewController Instance 。第二种解决方案是移动您的
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?)
将方法委托给您的 SignInViewController
class。
当你这样做时:
SignInViewController().stopanimating()
您正在做的是创建一个新的 SignInViewController 并调用它的方法。你想要做的是让现有的停止动画。
一种方法是:
let vc = (GIDSignIn.sharedInstance().uiDelegate as! SignInViewController)
vc.stopanimating()
您以后可能想重构它,但这应该会让您走上正确的道路!
我无法从我的应用程序委托中的函数停止 activity 指示器,我知道该函数正在被调用,但我在日志中没有收到任何错误。
我正在我的 signInViewController 中创建 activityIndicator,就像这样
@IBAction func googleSignInButton(_ sender: Any) {
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().signIn()
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.white
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.shared.beginIgnoringInteractionEvents()
}
在我的应用程序委托中我有这个功能,
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
print("this function is running")
SignInViewController().stopanimating()
// ...
if error != nil {
// ...
return
}
我知道这个函数工作正常,因为它在日志等中打印文本。并从 SignInViewController
调用此函数func stopanimating() {
print("stop animating function running")
DispatchQueue.main.async {
self.activityIndicator.stopAnimating()
UIApplication.shared.endIgnoringInteractionEvents()
}
}
现在我知道这个函数是 运行,因为它还在日志中打印预期的文本,而且 endIgnoringInteractionEvents 确实有效,但 activity 指标仍然是 运行
我是 swift 的新手,但我之前在通过我的 appdelegate 操作视图控制器中的对象时遇到了问题,这可能吗?
提前致谢
您需要从子视图中删除 activity 指示器。 修改你的 stopanimating()
func stopanimating() {
print("stop animating function running")
DispatchQueue.main.async {
self.activityIndicator.stopAnimating()
self.activityIndicator.removeFromSuperview()
UIApplication.shared.endIgnoringInteractionEvents()
}
}
这是因为您正在 appDelegate 中创建 SignInViewController 的新实例。即SignInViewController().stopanimating()
。您必须调用相同的实例才能停止动画显示 activity 指示器。
这是什么意思 -- SignInViewController()
。这意味着您正在创建 SignInViewController
的不同实例,因此在此实例中您的 Activity 指标不存在。
解决方案 - 第一个解决方案是获取显示 activity 指标的实例。这意味着您必须在您的情况下获得 currentViewController Instance 。第二种解决方案是移动您的
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?)
将方法委托给您的 SignInViewController
class。
当你这样做时:
SignInViewController().stopanimating()
您正在做的是创建一个新的 SignInViewController 并调用它的方法。你想要做的是让现有的停止动画。
一种方法是:
let vc = (GIDSignIn.sharedInstance().uiDelegate as! SignInViewController)
vc.stopanimating()
您以后可能想重构它,但这应该会让您走上正确的道路!