以编程方式用UIActivityIndi​​cator替换视图

时间:2017-09-05 15:18:07

标签: ios swift uiview uiactivityindicatorview

我一直在尝试创建一个快速方法,允许我在进程启动之前用旋转器替换任何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主视图为中心,这确实有效。所以我猜它一定与视图的位置有关。

谢谢!

1 个答案:

答案 0 :(得分:1)

在将微调器添加到控制器视图(而不是旧的spinner.center = view.center)之前尝试设置此项:

spinner.center = view.superview!.convert(view.center, to: controller.view)

您需要将view' center转换为controller.view的坐标。