以编程方式用 UI 活动指示器替换视图
Replacing a View with a UIActivityIndicator Programatically
我一直在尝试创建一种快速方法,允许我在进程开始之前用微调器替换任何 UIView,并在我的进程完成后重新显示视图。出于某种原因,UIView 确实消失了,但微调器从未显示。这些是有问题的方法:
func showLoader(view: UIView, controller: UIViewController) -> UIActivityIndicatorView {
let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
spinner.color = AC_BLUE
spinner.center = view.center
spinner.startAnimating()
view.alpha = 0
controller.view.addSubview(spinner)
return spinner
}
func hideLoader(view: UIView, spinner: UIActivityIndicatorView) {
view.alpha = 1
spinner.removeFromSuperview()
}
..我用这样的方式调用:
let spinner = Extensions().showLoader(view: signInBtn, controller: self)
APICalls().getUser(email: usernameTextField.text!, pass: passwordTextField.text!) { success, user in
//..CODE..//
Extensions().hideLoader(view: self.signInBtn, spinner: spinner)
}
此外,我尝试以主 VC 视图为中心,这确实有效。所以我猜它一定与视图的位置有关。
谢谢!
在将微调器添加到控制器视图之前尝试设置它(而不是旧的 spinner.center = view.center
):
spinner.center = view.superview!.convert(view.center, to: controller.view)
您需要将 view
的 center
转换为 controller.view
的坐标。
我一直在尝试创建一种快速方法,允许我在进程开始之前用微调器替换任何 UIView,并在我的进程完成后重新显示视图。出于某种原因,UIView 确实消失了,但微调器从未显示。这些是有问题的方法:
func showLoader(view: UIView, controller: UIViewController) -> UIActivityIndicatorView {
let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
spinner.color = AC_BLUE
spinner.center = view.center
spinner.startAnimating()
view.alpha = 0
controller.view.addSubview(spinner)
return spinner
}
func hideLoader(view: UIView, spinner: UIActivityIndicatorView) {
view.alpha = 1
spinner.removeFromSuperview()
}
..我用这样的方式调用:
let spinner = Extensions().showLoader(view: signInBtn, controller: self)
APICalls().getUser(email: usernameTextField.text!, pass: passwordTextField.text!) { success, user in
//..CODE..//
Extensions().hideLoader(view: self.signInBtn, spinner: spinner)
}
此外,我尝试以主 VC 视图为中心,这确实有效。所以我猜它一定与视图的位置有关。
谢谢!
在将微调器添加到控制器视图之前尝试设置它(而不是旧的 spinner.center = view.center
):
spinner.center = view.superview!.convert(view.center, to: controller.view)
您需要将 view
的 center
转换为 controller.view
的坐标。