Анимация текста UIButton не анимируется

После touchUpInside кнопки он запускает серию кода (все данные связаны, ни один код в основной функции не изменяет объект представления), и последнее, что делает код, - это вызывает функцию анимации, которую я вставил ниже. Проблема в том, что анимация выглядит не так, как должна.

Желаемая анимация:

  1. FooterImg должен исчезнуть
  2. Текст footerBar должен исчезнуть
  3. Текст footerBar должен исчезнуть
  4. FooterImg должен снова исчезнуть

Текст и изображение занимают одну и ту же позицию на экране, поэтому визуальный элемент должен заменять один другой, а затем возвращаться в исходное состояние. Представления не вложены друг в друга, они используют один и тот же контейнер.

Фактическая анимация, наблюдаемая в симуляторе:

-footerImg даже не виден -footerBar текст появляется сразу после нажатия триггера, без анимации -footerBar текст исчезает -footerImg исчезает

footerBar - это UIButton

-Это начальное состояние, прежде чем действие когда-либо начнется, заключается в том, что кнопка пуста и прозрачна (невидима для пользователя)

-Если это важно, это не кнопка, которая запускала функцию

-Имеет четкий фон, поэтому его текст должен быть единственным, что анимируется в / из

footerImg - это UIImageView

-Просто изображение значка, ничего особенного

func animateFeedback() {
    UIView.animateWithDuration(0.25, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: nil, animations: {
            self.footerImg.alpha = 0
            self.footerBar.alpha = 0

    },
        completion: { finished in
            self.footerBar.setTitle("Item added", forState: UIControlState.Normal)
        }
    )

    UIView.animateWithDuration(1.5, delay: 0.5, options: nil, animations: {
            self.footerBar.alpha = 1
        }
        , completion: nil
    )
    UIView.animateWithDuration(0.75, delay: 1.25, options: nil, animations: {
            self.footerBar.alpha = 0
        }
        , completion: { finished in
            self.footerBar.setTitle("", forState: UIControlState.Normal)
        }
    )
    UIView.animateWithDuration(0.25, delay: 1.5, options: nil, animations: {
            self.footerImg.alpha = 1
        }
        , completion: nil
    )
}

person Dave G    schedule 20.08.2015    source источник


Ответы (2)


Для последовательной анимации вы должны поместить анимацию в блок завершения. Например.

Текст footerBar должен исчезнуть

Текст footerBar должен исчезнуть

Попробуй это:

        self.footerBar.alpha = 0;

        UIView.animateWithDuration(1.5, delay: 0.5, options: nil, animations: {
            self.footerBar.alpha = 1
        }
        , completion: { finished in
            UIView.animateWithDuration(0.75, delay: 1.25, options: nil, animations: {
               self.footerBar.alpha = 0
            }
            , completion: { finished in
               self.footerBar.setTitle("", forState: UIControlState.Normal)
            }
            )
       }
       )

И то же самое для других

person tuledev    schedule 20.08.2015
comment
Работал. Пришлось установить альфа и заголовок нижнего колонтитула перед анимацией, тогда ваша вложенная методология позаботилась обо всех других проблемах, которые вызывали у меня проблемы. Спасибо. - person Dave G; 20.08.2015

прокомментируйте все коды, которые у вас есть в "animateFeedback ()", и вставьте в него приведенный ниже код.

UIView.animateWithDuration(1.5, delay: 0, options: nil, animations: { () -> Void in
        self.footerImg.alpha = 0;
        self.footerBar.setTitle("Item added", forState: UIControlState.Normal)
        },
        completion: { finished in
            UIView.animateWithDuration(1.5, delay: 0, options: nil, animations: { () -> Void in
                self.footerImg.alpha = 1;
                self.footerBar.setTitle("", forState: UIControlState.Normal)
                },
                completion: { finished in
                }
            )
        }
    )
person Shebin Koshy    schedule 20.08.2015