簡體   English   中英

iOS 10中的動畫錯誤

[英]Animation bug in iOS 10

從iOS 10開始,我注意到動畫布局更改( layoutIfNeeded() )沒有動畫。 這是我的UIView擴展,可在iOS 9及以下版本上很好地工作。

func slideIn(from edgeConstraint: NSLayoutConstraint, withDuration duration: Double = 0.25, finishedAnimating: (() -> Void)? = nil) {
    dispatch_async(dispatch_get_main_queue()) {
        edgeConstraint.constant = 0
        UIView.animateWithDuration(duration,
            delay: 0.0,
            options: .BeginFromCurrentState,
            animations: { self.layoutIfNeeded() },
            completion: { didComplete in
                finishedAnimating?()
        })
    }
}

func slideOut(from edgeConstraint: NSLayoutConstraint, withDuration duration: Double = 0.25, finishedAnimating: (() -> Void)? = nil) {
    dispatch_async(dispatch_get_main_queue()) {
        edgeConstraint.constant = -self.frame.height
        UIView.animateWithDuration(duration,
            delay: 0.0,
            options: .BeginFromCurrentState,
            animations: { self.layoutIfNeeded() },
            completion: { didComplete in
                finishedAnimating?()
        })
    }
}

有誰知道為什么它沒有動畫?

在動畫塊中,您要調用self.layoutIfNeeded() ,其中self是要設置動畫的UIView實例。 調用layoutIfNeeded()重繪調用該方法的視圖以及所有子視圖。 在您的情況下,您不想重繪UIView ,而是想重繪視圖的超級視圖。

如果在視圖控制器中調用這些函數,它們將很有意義並且可以正常工作,但是由於它們是在UIView本身的擴展中調用的,因此您需要調用諸如view.superview?.layoutIfNeeded()類的view.superview?.layoutIfNeeded()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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