2017-09-17 3 views
0

アプリケーションデリゲートの関数からアクティビティインジケータを停止する際に問題が発生しました。機能が呼び出されていますが、ログにエラーはありません。stopアプリケーションのデリゲートからのアクティビティインジケータの表示

私はそれが印刷して、この機能が正常に動作している知っている、私はこの機能を持っている私のアプリデリゲートにこの後そう

@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() 


} 

ように私のsignInViewControllerに

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) { 

      print("this function is running") 
      SignInViewController().stopanimating() 

      // ... 
      if error != nil { 
       // ... 


       return 
      } 

をactivityIndi​​catorを作成していますログのテキストそして今、私は、それはまた、ログに予想されるテキストを出力し、またendIgnoringInteractionEventsは仕事が、活動の指標には、まだかなり

イムを実行している場合と同様に、この関数が実行されている知っている

func stopanimating() { 
     print("stop animating function running") 
     DispatchQueue.main.async { 
      self.activityIndicator.stopAnimating() 
      UIApplication.shared.endIgnoringInteractionEvents() 
     } 
    } 

SignInViewController

からこの関数を呼び出しますすぐには新しいですが、私のappdelegateからViewControllerのオブジェクトを操作する際に問題が発生しましたが、これは可能ですか?あなたがサブビューからの活動の指標を削除する必要があり、事前

+0

まず、実行順序が最新であることを確認します。あなたのアプリケーションからアニメーションを無効にしようとした場合、デリゲートと非同期のデリゲート。開始アニメーションのために呼び出されることがあります。第2に、私は間違っているかもしれませんが、アニメーションを無効にしようとしているときにあなたのView Controllerのインスタンスではなくクラスを使用しているように見えます。それは目的ですか? – nevgauker

答えて

1

あなたが行うと:何をやっている

SignInViewController().stopanimating() 

が新しいSignInViewControllerを作成し、その上でメソッドを呼び出すことです。あなたがしたいのは、既存のアニメーションを停止させることです。これを行うには

一つの方法は次のとおりです。

let vc = (GIDSignIn.sharedInstance().uiDelegate as! SignInViewController) 
vc.stopanimating() 

あなたはそれ以降のリファクタリングすることがありますが、これは正しい道にあなたを取得する必要があります!

0

感謝。あなたはappDelegateでSignInViewControllerの新しいインスタンスを作成しているので、あなたのstopanimatingを()

func stopanimating() { 
     print("stop animating function running") 
     DispatchQueue.main.async { 
      self.activityIndicator.stopAnimating() 
      self.activityIndicator.removeFromSuperview() 
      UIApplication.shared.endIgnoringInteractionEvents() 
     } 
} 
2

変更 です。つまり、SignInViewController().stopanimating()です。アクティビティインジケータのアニメーションを停止するには、同じインスタンスをinorderコールする必要があります。

+0

ニースの説明。したがって+1。私も解決策を掲載しました。 –

1

これは - SignInViewController()の意味ですか?つまり、SignInViewControllerの別のインスタンスを作成しているため、このインスタンスではアクティビティインジケータが表示されません。

ソリューション - 最初の解決策は、アクティビティインジケータが表示されたインスタンスを取得することです。これはあなたのケースでcurrentViewController Instanceを取得する必要があることを意味します。 2番目の解決策は、SignInViewControllerクラスに func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) デリゲートメソッドを移動することです。

関連する問題