[英]UIView Animation sliding from below screen to bottom of screen
我以編程方式創建了一個UIStackView
,它由兩個UICollectionView
堆疊的UIStackView
組成。 其中之一是菜單欄,其中之一是顯示媒體內容的網格。
let contentStack = UIStackView()
contentStack.addArrangedSubview(menuBar)
contentStack.addArrangedSubview(grid)
self.view.addSubview(contentStack)
一旦按鈕被點擊,我希望UIStackView
出現在屏幕底部。 但是,當它出現時,我希望它進行動畫處理,因此它會從屏幕下方向上滑動。 我查看了類似於我的帖子的較舊的解決方案,但找不到任何有用的信息,因為我手動設置了如下約束:
contentStack.translatesAutoresizingMaskIntoConstraints = false
contentStackBotAnchor = contentStack.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
contentStackBotAnchor!.isActive = true
contentStack.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
contentStack.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
contentStack.axis = .vertical
contentStack.spacing = 0
我嘗試過這樣的解決方案:
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
self.contentStack.frame = CGRect.init(x: 0, y: self.view.frame.height - self.contentStack.frame.height, width: self.contentStack.frame.width, height: self.contentStack.frame.height)
}, completion: nil)
這對我不起作用。
正如Reinier所說,您可以設置約束動畫。 另一種選擇是使用CGAffineTransform
。 當視圖加載時,只需使用以下方法更改UIStackView
的y值:
contentStack.transform = CGAffineTransform(translationX: 0, y: view.frame.height)
然后,要為其設置動畫時,請使用您選擇的動畫:
UIView.animate(withDuration: 0.5, animations: {
contentStack.transform = .identity
})
在這種情況下,這就是我的偏愛,希望對您有所幫助。
如果使用約束,則必須使用約束進行動畫處理,嘗試一下,我不確定這些值,但必須像這樣
self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
contentStackBotAnchor.constant = (self.contentStack.bounds.size.height * -1)
self.view.layoutIfNeeded()
}, completion: nil)
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.