我的应用中有几个动画涉及更改不同对象的alpha值。这些对于淡化对象非常有用,但它们似乎永远不会用于淡入0。
UIView.animateWithDuration(0.4,
delay: 0,
options: .CurveLinear & .AllowUserInteraction & .BeginFromCurrentState,
animations: {
cell.notesLabel.alpha = 0
}, completion: nil)
基本上,透明度会立即直接切换到100%到0%。如果我增加持续时间,它只需要更长的时间来启动动画,然后它会立即再次。
有人有什么想法吗?
整个代码:
let cell = tableView.cellForRowAtIndexPath(indexPath) as CustomTransactionTableViewCell
if cell.notesLabel.alpha == 100 {
UIView.animateWithDuration(0.4,
delay: 0,
options: .CurveLinear | .AllowUserInteraction | .BeginFromCurrentState,
animations: {
cell.notesLabel.alpha = 0
}, completion: { (finished:Bool) in
UIView.animateWithDuration(1,
delay: 0,
options: .CurveLinear & .AllowUserInteraction & .BeginFromCurrentState,
animations: {
cell.paymentArrowImage.frame.origin.x = cell.paymentArrowImage.frame.origin.x - 400
cell.creditArrowImage.frame.origin.x = cell.creditArrowImage.frame.origin.x - 400
cell.paymentNameLabel.frame.origin.x = cell.paymentNameLabel.frame.origin.x + 400
cell.dateLabel.frame.origin.x = cell.dateLabel.frame.origin.x + 400
cell.costLabel.frame.origin.x = cell.costLabel.frame.origin.x - 400
}, completion: nil)
})
} else {
UIView.animateWithDuration(0.4,
delay: 0,
options: .CurveLinear & .AllowUserInteraction & .BeginFromCurrentState,
animations: {
cell.paymentArrowImage.frame.origin.x = cell.paymentArrowImage.frame.origin.x + 400
cell.creditArrowImage.frame.origin.x = cell.creditArrowImage.frame.origin.x + 400
cell.costLabel.frame.origin.x = cell.costLabel.frame.origin.x + 400
cell.paymentNameLabel.frame.origin.x = cell.paymentNameLabel.frame.origin.x - 400
cell.dateLabel.frame.origin.x = cell.dateLabel.frame.origin.x - 400
cell.notesLabel.alpha = 100
}, completion: nil)
}
答案 0 :(得分:2)
您的选项目前为.CurveLinear & .AllowUserInteraction & .BeginFromCurrentState
这些选项实际上是位移值,因此它们由001
或010
或100
表示,依此类推。
当你&
他们在一起时,你实际上正在测试他们共同分享哪些位。 001 % 010
返回00
,因为在一个中找到1,其中一个为0。
你想要的是|
(或)他们在一起。这使得如果在任何数字的位置值中找到1,则可以在答案中找到它。例如,010 | 001
会返回011
。
对于您的代码,您真的需要.CurveLinear | .AllowUserInteraction | .BeginFromCurrentState
。
答案 1 :(得分:1)
问题在于,当您希望它们的值为0.0到1.0时,您将使用0到100作为Alpha值。这会导致您的情况出现故障并导致动画问题。