从Swift中的任何类加载屏幕

我试图在swift中实现一个加载屏幕,我可以从项目中的任何类重用(我有几个类将处理“长时间运行”的活动)

公共职能是从另一个答案:

public class LoadingOverlay{ var overlayView = UIView() var activityIndicator = UIActivityIndicatorView() class var shared: LoadingOverlay { struct Static { static let instance: LoadingOverlay = LoadingOverlay() } return Static.instance } public func showOverlay(view: UIView) { overlayView.frame = CGRectMake(0, 0, 80, 80) overlayView.center = view.center overlayView.backgroundColor = MyGlobalVariables.UICOLORGREEN overlayView.clipsToBounds = true overlayView.layer.cornerRadius = 10 activityIndicator.frame = CGRectMake(0, 0, 40, 40) activityIndicator.activityIndicatorViewStyle = .WhiteLarge activityIndicator.center = CGPointMake(overlayView.bounds.width / 2, overlayView.bounds.height / 2) overlayView.addSubview(activityIndicator) view.addSubview(overlayView) activityIndicator.startAnimating() } public func hideOverlayView() { activityIndicator.stopAnimating() overlayView.removeFromSuperview() } 

}

在FirstViewController.swift(它位于何处)使用以下工作正常:

 LoadingOverlay.shared.showOverlay(self.view) 

我的问题是,如何在XYZ.swift中使用它? 由于self.view可能不是指由该类生成的视图。 是否可以调用并find当前的超级视图,然后在其上添加加载屏幕?

你需要将你的覆盖添加到你的主UIWindow类。 在这种情况下,你将覆盖所有的意见。

 public func showOverlay() { if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate, let window = appDelegate.window { overlayView.frame = CGRectMake(0, 0, 80, 80) overlayView.center = CGPointMake(window.frame.width / 2.0, window.frame.height / 2.0) overlayView.backgroundColor = MyGlobalVariables.UICOLORGREEN overlayView.clipsToBounds = true overlayView.layer.cornerRadius = 10 activityIndicator.frame = CGRectMake(0, 0, 40, 40) activityIndicator.activityIndicatorViewStyle = .WhiteLarge activityIndicator.center = CGPointMake(overlayView.bounds.width / 2, overlayView.bounds.height / 2) overlayView.addSubview(activityIndicator) window.addSubview(overlayView) activityIndicator.startAnimating() } } 

PS:你可以将overlayView大部分自定义代码移动到init函数中,因为每次显示时都不需要更新backgroundColor或其他东西。

PPS:有很好的库加载覆盖像

https://github.com/TransitApp/SVProgressHUD

https://github.com/jdg/MBProgressHUD

和别的。 只是谷歌它