我有一个动画,当它完成时我想从它的superView中删除它.但是,我无法理解Swift的完成处理程序语法.此动画是在UIView子类中编写的.
UIView.animateWithDuration(0.5,
delay: 0.0,
options: .CurveEaseInOut,
animations: { self.frame = CGRectMake(0,0, 500, 500)},
completion: /*Magic Code here??*/)
Run Code Online (Sandbox Code Playgroud)
我想把它self.removeFromSuperView()作为参数调用completion,但是在线阅读了很多文章之后我还是无法实现这一点.
谢谢!
UIView.animateWithDuration(0.5,
delay: 0.0,
options: .CurveEaseInOut,
animations: { self.frame = CGRectMake(0,0, 500, 500)},
completion: { complete in
self.removeFromSuperview()
})
Run Code Online (Sandbox Code Playgroud)
UIView.animate(
withDuration: 0.5,
delay: 0.0,
options: .curveEaseInOut,
animations: { self.frame = CGRect(x: 0, y: 0, width: 500, height: 500) },
completion: { [weak self] finished in
self?.removeFromSuperview()
})
Run Code Online (Sandbox Code Playgroud)
完成闭包需要一个参数a Bool(finished在上面的代码中调用),指示动画是否实际完成或被中断.
值得考虑的是,由于您self在完成闭包中引用,因此可能*动画可能会影响视图的生命周期(考虑到视图否则将被释放时动画仍在运行,但是闭包的强引用仍在保持观点活着).出于这个原因,我包含了一个捕获列表,以确保使用弱引用self.
*可能,但可能不太可能......视图应仅在响应从视图层次结构中删除时被释放,我希望无论如何都会隐式取消动画并调用完成闭包finished == false.但是,[weak self]无论如何,我个人都会谨慎行事,因为我是偏执狂.
| 归档时间: |
|
| 查看次数: |
4799 次 |
| 最近记录: |