Затенение между 3 изображениями в кнопке UIB на iOS - PullRequest
0 голосов
/ 28 июня 2010

Я пытаюсь реализовать кликабельное изображение, которое может циклически повторять три или более изображения.Мне не нужно взаимодействовать с изображениями после настройки цикла.Велоспорт основан на времени, а не на событиях.Изображения должны плавно переходить от одного к другому.

Каков наилучший способ решения этой проблемы?

Моим первым подходом был конечный автомат в одном методе и цепочка UIViewанимация блоков вместе с помощью селектора этого метода.Это не удалось, так как [button setImage:nextImage forState:UIControlStateNormal] не анимирован.

Мой второй подход заключался в просмотре CABasicAnimation и слоев.Похоже, что это был более низкоуровневый подход, но я не мог увидеть способ связывания переходов вместе (например, задание следующего действия после завершения этого действия).

Мое ощущение, что приближается использование нескольких кнопоки исчезновение между ними совершенно неправильно, но я не уверен, куда идти дальше.

Как плавно затухать между изображениями в UIButton?

Как объединить эти переходы вместе?

Как правильно поступить?

Редактировать: Изображения i1, i2, i3 должны идти в последовательности i1 -> i2 -> i3 -> i2 -> i1 -> i2 -> i3 и т. Д.

Ответы [ 3 ]

4 голосов
/ 28 июня 2010

Моя первая мысль - UIImageView.animationImages, но я не думаю, что она поддерживает затухание.

Не используйте UIButton для отображения изображения; просто сделайте его невидимой кнопкой поверх чего-то еще, что обрабатывает рисунок.

Один из простых способов сделать анимацию, которую вы хотите, - это использовать два представления изображения: переместить представление изображения с «затуханием» вперед (-[UIView bringSubviewToFront:]), установить его альфа в 0, а затем анимировать его альфа в 1 .

0 голосов
/ 01 июля 2010

Я уверен, что что-то вроде этого будет работать:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];

[button setImage:whicheverImage forState:UIControlStateNormal];

[UIView commitAnimations];

Он должен плавно исчезать, если вы даете ему длительность, может быть, 0,5 (секунды).

0 голосов
/ 29 июня 2010

Мое решение:

  • Имеет UIButton и контейнер UIView.
  • Контейнер UIView содержит все изображения как UIImageView дочерние представления.
  • Запустите анимацию в методе viewDidAppear UIViewController, где для всех дочерних представлений альфа установлена ​​в 1.0.Затем установите 0-ую альфу imageView на 1,0.
  • Когда эта анимация закончится, вспомните тот же метод, который устанавливает задержку
  • и заботится об анимации следующего изображения.

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

  • все изображения можно настроить в интерфейсеПостроитель без какого-либо загрязнения имен изображений в коде.
  • метод был самодостаточным, и управление памятью без проблем.
...