除了该视图控制器的一个视图外,是否可以使视图控制器DIM(如Alert View Controller)



我只是想创建一个视图,当它显示时,整个背景将像警报视图控制器一样变暗。如果可能的话,请指导我,如果可能,请提供我的代码。

谢谢

做到这一点的最简单方法是添加半透明背景(例如,黑色的alpha vith Alpha小于1.0(视图,其中包含 alert>"警报"视图。背景视图应涵盖视图控制器中的所有其他视图。

您还可以使用具有视图的背景视图的模态视图控制器,并在全屏上使用演示样式。

// Here is the wrapper code  i use in most of my project now a days
protocol TransparentBackgroundProtocol {
  associatedtype ContainedView
  var containedNib: ContainedView? { get set }
}
extension TransparentBackgroundProtocol  where ContainedView: UIView {
  func dismiss() {
    containedNib?.superview?.removeFromSuperview()
    containedNib?.removeFromSuperview()
  }
  mutating func add(withFrame frame: CGRect, toView view: UIView, backGroundViewAlpha: CGFloat) {
    containedNib?.frame = frame
    let backgroundView = configureABlackBackGroundView(alpha: backGroundViewAlpha)
    view.addSubview(backgroundView)
    guard let containedNib = containedNib else {
      print("No ContainedNib")
      return
    }
    backgroundView.addSubview(containedNib)
  }
  private func configureABlackBackGroundView(alpha: CGFloat) -> UIView {
    let blackBackgroundView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
    blackBackgroundView.backgroundColor = UIColor.black.withAlphaComponent(alpha)
    return blackBackgroundView
  }
}
// Sample View shown like alertView
class LogoutPopUpView: UIView, TransparentBackgroundProtocol {
    // MARK: Variables
    weak var containedNib: LogoutPopUpView?
    typealias ContainedView = LogoutPopUpView
    // MARK: Outlets

    // MARK: Functions
    class func initiate() -> LogoutPopUpView {
        guard let nibView = Bundle.main.loadNibNamed("LogoutPopUpView", owner: self, options: nil)?[0] as? LogoutPopUpView else {
            fatalError("Cann't able to load nib file.")
        }
         return nibView
    }
}

// where  u want to show pop Up
        logOutPopup = LogoutPopUpView.instanciateFromNib()
       let view = UIApplication.shared.keyWindow?.rootViewController?.view {
            logOutPopup?.add(withFrame: CGRect(x: 30, y:(UIScreen.main.bounds.size.height-340)/2, width: UIScreen.main.bounds.size.width - 60, height: 300), toView: view, backGroundViewAlpha: 0.8)            
        }
 // for dismiss
self.logOutPopup?.dismiss()

最新更新