#ios #delegates
#iOS #делегаты
Вопрос:
Я внедряю GoogleSignInDelegate для аутентификации.В этом я реализовал метод делегирования GoogleSignIn.Я хочу добавить UIActivityIndicator в один из его методов с той же существующей реализацией.Есть идеи, как я могу это сделать?
Комментарии:
1. вы можете инициализировать UIActivityIndicator в методе viewDidLoad() действия и анимировать в любом из методов GoogleSignInDeleggate.
2. @SachinSaxena — Но тогда реализация этого метода по умолчанию не вызывается, что реализовано с помощью Google sign in framework. Как я могу выполнить обе реализации для этого метода делегирования?
3. Я приложил один ответ ниже. Я реализовал подобное в своем приложении.
Ответ №1:
В моем контроллере регистрации я реализовал метод делегирования.
// MARK: GIDSignInDelegates.
func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
showProgressBarIndicator()
if (error == nil) {
let params = [
"access_token" : user.authentication.accessToken,
"email" : user.profile.email,
"name" : user.profile.name,
"photoUrl" : user.profile.imageURLWithDimension(100).absoluteString,
"profile_url" : user.profile.imageURLWithDimension(100).absoluteString,
"provider" : Provider.GooglePlus.rawValue,
"provider_id" : user.authentication.clientID
]
AFWrapper.requestPOSTURL(BaseUrl ApiMethod.SignUp.rawValue, params: params,
success: {(JSONResponse) -> Void in
self.saveDataToDisk(JSONResponse)
},
failure: { (error) -> Void in
dispatch_async(dispatch_get_main_queue(), {
self.removeProgressBarIndicator()
JLToast.makeText("Connection Error!").show()
})
}
)
} else {
dispatch_async(dispatch_get_main_queue(), {
self.removeProgressBarIndicator()
JLToast.makeText("Error in getting data from Google!").show()
})
}
}
и у моего базового контроллера у меня есть следующий метод.
func showProgressBarIndicator() {
container.frame = self.view.frame
container.center = view.center
container.backgroundColor = UIColor(colorLiteralRed: 255.0, green: 255.0, blue: 255.0, alpha: 0.7)
let loadingView: UIView = UIView()
loadingView.frame = CGRectMake(0, 0, 80, 80)
loadingView.center = view.center
loadingView.backgroundColor = UIColor(colorLiteralRed: 0.0, green: 0.0, blue: 0.0, alpha: 0.7)
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 10
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
activityIndicator.activityIndicatorViewStyle =
UIActivityIndicatorViewStyle.WhiteLarge
activityIndicator.center = CGPointMake(loadingView.frame.size.width / 2,
loadingView.frame.size.height / 2);
activityIndicator.startAnimating()
loadingView.addSubview(activityIndicator)
container.addSubview(loadingView)
self.view.addSubview(container)
}
func removeProgressBarIndicator() {
if !container.isDescendantOfView(self.view) {
self.container.removeFromSuperview()
}
}