簡體   English   中英

UIView動畫從屏幕下方滑動到屏幕底部

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM