2016-06-07 43 views
0

我有这个类:框架上的ViewController

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 MyController: UIViewController{ 
    .... 

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

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

+0

帮助全 - http://stackoverflow.com/questions/27975321/how-做-I-展示和或隐藏-A-子视图 - 使用 - 迅速 –

回答

0

更改要返回位的观点:

  1. 使具有相同的帧作为视图控制器的视图中的“容器”的说法。给这个观点一个“清晰”的背景。

  2. 制作一个“背景”视图,大小与“容器”视图相同并将其添加到容器中。给这个观点一个黑色的背景和0.4的α。

  3. 现在把你目前在你的“等待”方法中建立的视图添加到“容器”视图中(而不是背景视图,这应该是背景视图的兄弟,否则你的警报也将是透明的)。

  4. 确保您的视图禁用了所有的用户交互功能(可能只需要在“容器”视图中将其禁用)。

这给你一个覆盖整个屏幕的容器视图,它有两个孩子:相同大小的透明背景和当前的“等待”警报。

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

(请记住,这不处理屏幕旋转......你将不得不如果需要的话自己做。)