Обратный отсчет с использованием изображений - PullRequest
1 голос
/ 27 мая 2011

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

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

Я не уверен, как это сделать, но моя теория такова: я знаю, что максимальное значение, с которого я считаю, равно 999. Таким образом, я мог бы создать 3 UIImageView для представления каждой цифры.В настоящее время таймер обновляет оставшееся значение обратного отсчета каждую секунду, что в свою очередь устанавливает значение UILabel.В теории я мог бы разделить эту строку на составляющие ее цифры (или зациклить на символах строк) и загрузить «цифровое» изображение в соответствующий UIImageView на основе переданной цифры.

Мои вопросы:

  1. Будет ли упомянутый мною подход эффективен?

  2. Это наилучший подход с учетом ситуации?

  3. Как я могу анимировать изменение изображения?В идеале я хотел бы, чтобы новое изображение скользило сверху изображения, а заменяемое изображение выдвигалось снизу.Возможно ли это вообще?

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

Большое спасибо, что нашли время, чтобы прочитать этот пост.

РЕДАКТИРОВАТЬ, похоже, что пост здесь Как анимировать изменение изображения в UIImageView? помогает мне с анимацией реальных изображений,Но я все же хотел бы получить какие-либо предложения по моей предложенной реализации.

Ответы [ 2 ]

1 голос
/ 27 мая 2011
  1. Эффективное? Я думаю, что ваш подход обоснован. Анимация 3 относительно небольших изображений за 1000 миллисекунд - это не много для процессора. Но на вопрос эффективности / производительности всегда нужно отвечать эмпирически (imo).
  2. Лучший? - Если это работает, работает, не падает, и т.д., что еще вам нужно? Единственный другой подход, который я могу придумать, - предоставить фоновое изображение и по-прежнему использовать динамическую UILabel для цифры.

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

0 голосов
/ 27 мая 2011

Ваш основной подход - это звук.Некоторые вещи, которые нужно иметь в виду:

Для таймера обратного отсчета не уменьшайте время, оставшееся в NSTimer.Вместо этого всегда используйте «сейчас минус время начала».NSTimer может не срабатывать по расписанию, если система занята.Прочтите «Повторяющиеся и неповторяющиеся таймеры» в NSTimer , чтобы понять, как они работают.

Для такой проблемы мне нравится называть свои файлы именами наподобие digit0.png, digit1.png и т. д. Затем вы можете загрузить их следующим образом:

NSString *imageName = [NSString stringWithFormat:@"digit%d.png", digit];
self.imageView.image = [UIImage imageNamed:imageName];

+imageNamed: имеет свое собственное кэширование, так что это довольно эффективно.Кроме того, вы можете использовать массив из 10 изображений, которые вы загружаете на раннем этапе, и использовать objectAtIndex:, чтобы получить правильное.Я просто обычно делаю это с + imageNamed:.

Вставить новое изображение не проблема, но вы не должны использовать UIImageView для этого.Вам, вероятно, следует создать пользовательский вид с двумя CALayers, которые вы загружаете вместе с текущим и следующим изображением, и использовать простую анимацию для перемещения от одного к другому.Начните с Core Animation Programming Guide , и в Интернете также есть несколько учебных пособий.Это отличный маленький проект для изучения Core Animation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...