框架 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()
}
}
问题是当我触摸我的应用程序的任何地方时显示框架时,该框架被隐藏。我需要当显示此框架时其他选项保持禁用状态,当我完成框架时,再次启用应用程序的选项。我该怎么做?
稍微改变一下您返回的视图:
制作一个 "container" 视图,它与视图控制器的视图具有相同的框架。给这个视图一个 "clear" 背景。
创建一个 "background" 视图,与 "container" 视图大小相同,并将其添加到容器中。给这个视图一个黑色背景和一个 alpha,比如 0.4。
现在将您当前正在构建的视图放入 "waiting" 方法中,并将其添加到 "container" 视图(不是背景视图,这应该是一个背景视图的兄弟,否则您的警报也将是透明的)。
确保在您的视图中禁用所有用户交互(可能只需要在 "container" 视图中禁用它)。
这为您提供了一个覆盖整个屏幕的容器视图,它有 2 个子视图:一个相同大小的透明背景,以及您当前的 "waiting" 警报。
现在,如果您将 "container" 视图添加到视图控制器的视图中,用户只能触摸不执行任何操作的容器视图。
(请记住,这不会处理屏幕旋转...如果需要,您必须自己做。)
我有这个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()
}
}
问题是当我触摸我的应用程序的任何地方时显示框架时,该框架被隐藏。我需要当显示此框架时其他选项保持禁用状态,当我完成框架时,再次启用应用程序的选项。我该怎么做?
稍微改变一下您返回的视图:
制作一个 "container" 视图,它与视图控制器的视图具有相同的框架。给这个视图一个 "clear" 背景。
创建一个 "background" 视图,与 "container" 视图大小相同,并将其添加到容器中。给这个视图一个黑色背景和一个 alpha,比如 0.4。
现在将您当前正在构建的视图放入 "waiting" 方法中,并将其添加到 "container" 视图(不是背景视图,这应该是一个背景视图的兄弟,否则您的警报也将是透明的)。
确保在您的视图中禁用所有用户交互(可能只需要在 "container" 视图中禁用它)。
这为您提供了一个覆盖整个屏幕的容器视图,它有 2 个子视图:一个相同大小的透明背景,以及您当前的 "waiting" 警报。
现在,如果您将 "container" 视图添加到视图控制器的视图中,用户只能触摸不执行任何操作的容器视图。
(请记住,这不会处理屏幕旋转...如果需要,您必须自己做。)