将alpha动画设为0无法正常运行

时间:2014-10-17 20:41:08

标签: ios xcode swift uilabel uianimation

我的应用中有几个动画涉及更改不同对象的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)
        }

2 个答案:

答案 0 :(得分:2)

您的选项目前为.CurveLinear & .AllowUserInteraction & .BeginFromCurrentState

这些选项实际上是位移值,因此它们由001010100表示,依此类推。

当你&他们在一起时,你实际上正在测试他们共同分享哪些位。 001 % 010返回00,因为在一个中找到1,其中一个为0。

你想要的是|(或)他们在一起。这使得如果在任何数字的位置值中找到1,则可以在答案中找到它。例如,010 | 001会返回011

对于您的代码,您真的需要.CurveLinear | .AllowUserInteraction | .BeginFromCurrentState

答案 1 :(得分:1)

问题在于,当您希望它们的值为0.0到1.0时,您将使用0到100作为Alpha值。这会导致您的情况出现故障并导致动画问题。