我无法使块上斯威夫特工作。下面是工作(没有完成块)的例子:
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
或可替代地不尾部封闭:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
但一旦我尝试添加完成块,它只是将无法正常工作:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
自动完成让我completion: ((Bool) -> Void)?
但不知道如何使它发挥作用。也尾随封闭尝试,但得到了同样的错误:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
// This is how I do regular animation blocks
UIView.animate(withDuration: 0.2) {
<#code#>
}
// Or with a completion block
UIView.animate(withDuration: 0.2, animations: {
<#code#>
}, completion: { _ in
<#code#>
})
我不使用尾随关闭为完成块,因为我觉得它缺乏透明度,但如果你喜欢它,那么你可以看到Trevor's answer below。
在animateWithDuration完成参数取块这需要一个布尔参数。在迅速,像的OBJ C语言块,你必须指定一个封闭取参数:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
(value: Bool) in
self.blurBg.hidden = true
})
这里最重要的部分是(value: Bool) in
。这告诉这个闭合需要一个布尔标有“价值”,并返回void编译器。
作为参考,如果你想写返回布尔语法将封闭
{(value: Bool) -> bool in
//your stuff
}
完成是正确的,封闭必须接受Bool
参数:(Bool) -> ()
。尝试
UIView.animate(withDuration: 0.2, animations: {
self.blurBg.alpha = 1
}, completion: { finished in
self.blurBg.hidden = true
})
本身强调旁边的in
关键字会忽略输入
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: { _ in
self.blurBg.hidden = true
})
还有就是我基于上述接受的答案上述溶液。它淡出视图和hiddes一次几乎看不见。
斯威夫特2
func animateOut(view:UIView) {
UIView.animateWithDuration (0.25, delay: 0.0, options: UIViewAnimationOptions.CurveLinear ,animations: {
view.layer.opacity = 0.1
}, completion: { _ in
view.hidden = true
})
}
迅速3,4,5
func animateOut(view: UIView) {
UIView.animate(withDuration: 0.25, delay: 0.0, options: UIView.AnimationOptions.curveLinear ,animations: {
view.layer.opacity = 0.1
}, completion: { _ in
view.isHidden = true
})
}
在这里,您去,这将编译
斯威夫特2
UIView.animateWithDuration(0.3, animations: {
self.blurBg.alpha = 1
}, completion: {(_) -> Void in
self.blurBg.hidden = true
})
迅速3,4,5
UIView.animate(withDuration: 0.3, animations: {
self.blurBg.alpha = 1
}, completion: {(_) -> Void in
self.blurBg.isHidden = true
})
我之所以作出的布尔区下划线是因为你不使用该值,如果你需要它,你可以更换(_)与(价值:布尔)
有时候,你想扔这在一个变量中根据情况不同的方式来制作动画。为此你需要
let completionBlock : (Bool) -> () = { _ in
}
或者你可以使用同样详细:
let completionBlock = { (_:Bool) in
}
但在任何情况下,你必须从某个地方注明Bool
。
SWIFT 3.X + 4.x版
我想进行更新和简化的东西。
实施例下面是在它被缓慢地隐藏任何view
实现,并且当它是完全透明的;删除它自身从父view
ok
变量将始终与动画结束返回true
。
alpha = 1
UIView.animate(withDuration: 0.5, animations: {
self.alpha = 0
}) { (ok) in
print("Ended \(ok)")
self.removeFromSuperview()
}