【问题标题】:Swift: How to keep a view in front of animationSwift:如何在动画前保持视图
【发布时间】:2020-06-29 05:17:05
【问题描述】:

每当我按下添加按钮时,我希望下拉视图从黑色视图下方滑动,而不是显示在顶部然后向下滑动。

我曾经在故事板中使用黑色视图,它停留在下拉视图的前面,从而产生从黑色视图下方滑动的效果。现在我在情节提要中删除了该视图并以编程方式创建了一个新视图,但我遇到了这个问题。

我尝试了常用的方法bringToFront/sendToBack,但是没有用。

这是我的代码

override func viewDidLoad() {
        super.viewDidLoad()
        
        blackView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 500, height: 100))
        blackView.backgroundColor = UIColor.black
        
        self.view.addSubview(blackView)
        self.view.bringSubviewToFront(blackView)
        blackView.layer.zPosition = .greatestFiniteMagnitude
        self.view.sendSubviewToBack(dropDownView)
        
        dropDownView.isHidden = true 

        addButton.setImage(#imageLiteral(resourceName: "addBa"), for: .normal)
        addButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        self.blackView.addSubview(addButton) 
}

    @objc func buttonAction() {
              
           if (dropDownView.isHidden == true ) {
               
               openDropDownView()
           }
           else { closeDropDownViewA() }
           
           }

     func openDropDownView() {
        self.dropDownView.isHidden = false
        
        
        UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseOut, animations: {
            
          var fabricTopFrame = self.dropDownView.frame
          fabricTopFrame.origin.y -= fabricTopFrame.size.height
          
          var fabricBottomFrame = self.dropDownView.frame
          fabricBottomFrame.origin.y += fabricBottomFrame.size.height
          
          self.dropDownView.frame = fabricTopFrame
          self.dropDownView.frame = fabricBottomFrame
            
            
            UIView.animate(withDuration: 0.5) {
                self.dimView.alpha = 0.75
            }
            
            
            
        }, completion: { finished in
          print("dropDownView opened!")
        })
    }

谢谢!

【问题讨论】:

  • openDropDownView 看起来如何?
  • @GabrielPires 我更新了!谢谢

标签: ios swift view uiview


【解决方案1】:

修复它。我加了

     let currentWindowB: UIWindow? = UIApplication.shared.keyWindow
     currentWindow?.addSubview(blackView)

@objc
func buttonAction() {
    if dropDownView.isHidden {
        openDropDownView()
    } else {
        closeDropDownViewA()
    }
}

【讨论】:

  • 只是一个警告,如果您在窗口级别添加它,您可能需要考虑对其他页面的影响。由于 window 是应用程序的最顶层,blackView 也会出现在其他页面中。在 iPad 中,您的应用程序可以支持多个窗口,因此 currentWindowUIApplication 您可能还需要考虑这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
相关资源
最近更新 更多