Im made和DropDown Menu選擇動作,如下面的GIF。Swift ||從Superview動畫和刪除子視圖時出現Bug
所以我做了一個子視圖和動畫吧。 當動畫子視圖了,它看起來非常怪異。
特別是問題是,它看起來像一個空白的小酒吧,而不是菜單。
有誰知道問題出在哪裏?
我做的子視圖ViewController是一個簡單的ViewController裏面有一個TableView和一個原型單元格。
代碼:
let blackView = UIView()
var tvx: OptionsVC = OptionsVC()
var h: CGFloat!
。
func optionsClicked() {
self.h = CGFloat(70 + (52 * (OptionsVC().arrayFunctionCellNames.count)))
navigationController?.hidesBarsOnTap = false
tvx = self.storyboard?.instantiateViewController(withIdentifier: "options") as! OptionsVC
if let window = UIApplication.shared.keyWindow {
blackView.backgroundColor = UIColor(white: 0, alpha: 0.5)
blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))
view.addSubview(blackView)
view.addSubview(tvx.view)
let y = (self.navigationController?.navigationBar.frame.size.height)! + UIApplication.shared.statusBarFrame.height
tvx.view.frame = CGRect(x: 0, y: (y - self.h), width: view.frame.width, height: h)
blackView.frame = CGRect(x: 0, y: y, width: view.frame.width, height: view.frame.height)
blackView.alpha = 0
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.blackView.alpha = 1
self.tvx.view.frame = CGRect(x: 0, y: y, width: self.view.frame.width, height: self.h)
self.blackView.frame = CGRect(x: 0, y: (y + self.h), width: self.view.frame.width, height: self.view.frame.height)
}, completion: nil)
}
}
。
func handleDismiss() {
UIView.animate(withDuration: 5.5, animations: {
let y = (self.navigationController?.navigationBar.frame.size.height)! + UIApplication.shared.statusBarFrame.height
self.blackView.alpha = 0
if let window = UIApplication.shared.keyWindow {
self.blackView.frame = CGRect(x: 0, y: y, width: self.view.frame.width, height: self.view.frame.height)
self.tvx.view.frame = CGRect(x: 0, y: (y - self.h), width: self.view.frame.width, height: self.h)
}
}, completion: {(finished:Bool) in
self.blackView.removeFromSuperview()
self.tvx.view.removeFromSuperview()
self.navigationController?.hidesBarsOnTap = true
})
}
GIF的BUG:
我把它這麼慢,所以你可以更好地看到它
只是一個評論通過。如果我要這樣做,我只能使用約束,並將所述約束動畫化爲屏幕內外的動畫,不能從超級視圖中刪除或更改幀。 – Glenn
我會同意@Glenn。你可以得到這個工作,但它不再是真正的標準。幾年前,我做了這樣的事情,它給了我同樣的問題。如果我可以挖掘代碼,我會與你分享。 –