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