【问题标题】:Frame on ViewControllerViewController 上的框架
【发布时间】:2016-06-07 17:15:04
【问题描述】:

我有这门课:

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()  
  }  
}  

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

【问题讨论】:

标签: ios swift frame


【解决方案1】:

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

  1. 创建一个与视图控制器视图具有相同框架的“容器”视图。给这个视图一个“清晰”的背景。

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

  3. 现在将您当前正在构建的视图放入“等待”方法中,并将其添加到“容器”视图中(不要添加到背景视图中,这应该是背景视图的兄弟,否则您的警报也将是透明的)。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多