Анимация альфа до 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
,