框架 ViewController

Frame on ViewController

我有这个class:

extension UIViewController {  
    func waiting() -> UIView{  
        let strLabel = UILabel(frame: CGRect(x: 50, y: 0, width: 200, height: 50))  
        strLabel.text = "Aguarde..."  
        strLabel.textColor = UIColor.whiteColor()  
        let messageFrame = UIView(frame: CGRect(x: view.frame.midX - 90, y: view.frame.midY - 25 , width: 180, height: 50))  
        messageFrame.layer.cornerRadius = 15  
        messageFrame.backgroundColor = UIColor(white: 0, alpha: 0.40)  
        let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White)  
        activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50)  
        activityIndicator.startAnimating()  
        messageFrame.addSubview(activityIndicator)  
        messageFrame.addSubview(strLabel)  
        view.addSubview(messageFrame)  

        return messageFrame  
    }  
}  

当我需要用这个class我用:

class MyController: UIViewController{  
  ....  

  func x(){  
     let messageFrame = waiting()  
     //my code  
     messageFrame.removeFromSuperview()  
  }  
}  

问题是当我触摸我的应用程序的任何地方时显示框架时,该框架被隐藏。我需要当显示此框架时其他选项保持禁用状态,当我完成框架时,再次启用应用程序的选项。我该怎么做?

稍微改变一下您返回的视图:

  1. 制作一个 "container" 视图,它与视图控制器的视图具有相同的框架。给这个视图一个 "clear" 背景。

  2. 创建一个 "background" 视图,与 "container" 视图大小相同,并将其添加到容器中。给这个视图一个黑色背景和一个 alpha,比如 0.4。

  3. 现在将您当前正在构建的视图放入 "waiting" 方法中,并将其添加到 "container" 视图(不是背景视图,这应该是一个背景视图的兄弟,否则您的警报也将是透明的)。

  4. 确保在您的视图中禁用所有用户交互(可能只需要在 "container" 视图中禁用它)。

这为您提供了一个覆盖整个屏幕的容器视图,它有 2 个子视图:一个相同大小的透明背景,以及您当前的 "waiting" 警报。

现在,如果您将 "container" 视图添加到视图控制器的视图中,用户只能触摸不执行任何操作的容器视图。

(请记住,这不会处理屏幕旋转...如果需要,您必须自己做。)