我期望在指定的持续时间后调用此UIView动画的完成关闭,但是它似乎立即触发了...
UIView.animateWithDuration(
Double(0.2),
animations: {
self.frame = CGRectMake(0, -self.bounds.height, self.bounds.width, self.bounds.height)
},
completion: { finished in
if(finished) {
self.removeFromSuperview()
}
}
)
其他人有没有经历过?我已经读到其他人在使用中心而不是框架移动 View 方面取得了更大的成功,但是这种方法也存在相同的问题。
最佳答案
对于与此有关的其他任何人,如果有任何事情中断了动画,则会立即调用完成关闭。在我的情况下,这是由于与自定义segue即将退出的 View Controller 的模式转换略有重叠。使用delay
的UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations:{}
部分对我没有影响。我最终使用GCD将动画延迟了一秒钟。
// To avoid overlapping with the modal transiton
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.2 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
// Animate the transition
UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
// Animations
}, completion: { finished in
// remove the views
if finished {
blurView.removeFromSuperview()
snapshot.removeFromSuperview()
}
})
})