【发布时间】:2015-05-05 15:18:49
【问题描述】:
我正在使用 animateWithDuration:completion 为 UIView 的某些属性设置动画。在这些动画完成后,我想从他的超级视图中删除这个视图。 问题是,如果我在完成块 removeFromSuperView 内添加,我根本不会得到动画。我找到的解决方法是删除 dispatch_after 中的视图。为什么?
var loadingView: Loading! //This is a UIView loaded from a Nib
let delaySecs: NSTimeInterval = 2
UIView.animateWithDuration(delaySecs, animations: { () -> Void in
self.loadingView.cherrysImageView.transform = CGAffineTransformMakeScale(2, 2)
self.loadingView.cherrysImageView.alpha = 0
}) { (succeed) -> Void in
//Can't remove the view here, otherwise i get NO animation
//self.loadingView.removeFromSuperview()
}
//And if i add this instead of removing the view in the completion block, it works as expected
let delay = delaySecs * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) { () -> Void in
self.loadingView.removeFromSuperview()
}
【问题讨论】:
-
我复制了你的代码,它可以很好地删除完成块中的超级视图。