Анимация альфа до 0 не работает должным образом

В моем приложении есть пара анимаций, которые включают изменение значения альфа-канала различных объектов. Они отлично подходят для затухания объекта, но, похоже, никогда не затухают до 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 до 100 в качестве альфа-значений, когда ожидается, что они будут значениями от 0,0 до 1,0. Это вызывает ваше состояние со сбоями, а также вызывает проблемы с анимацией.

Ваши варианты в настоящее время .CurveLinear & .AllowUserInteraction & .BeginFromCurrentState

Эти параметры на самом деле являются значениями со сдвигом в битах, поэтому они представлены 001, или же 010, или же 100, и так далее.

Когда ты & их вместе, вы на самом деле тестируете, чтобы увидеть, какие биты у них всех общие. 001 % 010 возвращается 00, потому что, где 1 находится в одном, 0 находится в обоих.

То, что вы хотите, это | (или) их вместе. Это делает так, что если в этом месте найдена 1 для любого из чисел, она будет найдена в ответе. Например, 010 | 001 возвращается 011,

Для вашего кода вы действительно хотите .CurveLinear | .AllowUserInteraction | .BeginFromCurrentState,

Другие вопросы по тегам