Подобные вещи - чертовски неприятная вещь, и (насколько я знаю) не существует простого способа.
Сначала вы должны упростить К.И.С.С. сделав каждый блок одинаковой длины. Вот как это сделать ..
(1) сделать стандартную ширину (скажем, 100 пикселей) для каждого «блока».
Блоки будут просто UIViews (или, возможно, просто текстовые метки). Вам удобно создавать UIViews на лету? Если нет, мы расскажем вам, как это сделать!
(2) выберите начальную точку для путешествия, которое полностью справа от экрана
(3) выберите конечную точку для путешествия, которая полностью слева от экрана
(3b) выберите точное время (скажем, «4,71937 с»), которое вы хотите для времени в пути от точки 1 до точки 2
(4) точно вычисляет (как точно!) Секунды, которые требуется для перемещения блока его собственная длина справа налево. скажем, 0,91763 секунд
Вы должны использовать NSTimers для этого. Вы знакомы с ними?
(5) установить повторяющийся таймер 0,91763 с, который: создает новый блок и
(5b) высасывает следующую, если таковая имеется, часть текстовой информации (скажем, "AAPL 408.50") и
(5c) размещает его в начальной точке 2 и
(5d) простое использование основной анимации начинает ее анимацию к конечной точке3 и
(5e) запустить отдельный таймер одного выстрела для этого блока, который уничтожит этот блок после общего времени, указанного в 3b
Вот и все.
Вам нужно будет установить простой стек FIFO для текстовых элементов (независимо от того, что вы выберете), когда вы получаете их из любого источника, вставьте их в него.
Вам удобно настраивать какой-то массив для использования в качестве стека информации? Опять же, если не мы можем помочь! :)
Обратите внимание, что в (5b) вы, скорее всего, вернете тот, который вы только что использовали, на другой конец стека, чтобы они продолжали работать вечно. Вполне вероятно, что вам придется иметь возможность прикоснуться к отдельным элементам, чтобы удалить их или, например, изменить цену или что-то еще, когда появится новая информация.
Как только вы получите эту работу («метод стандартной длины блока»). Вы можете предпочесть как-то определить точную длину каждого текстового блока (AAPL 400.50 длиннее, чем AAPL 30) ... для этого ...
Рассчитайте на лету новое значение времени собственной длины (как в пункте 4) для каждого блока только для этого блока. то есть, сделать это в пункте 5.b.2. вместо того, чтобы использовать повторяющийся таймер (в пункте 5), запустите новый таймер (в 5f), чтобы запустить следующий блок. (Для ясности, пункты 3b и 5e не изменились.)
Надеюсь, это поможет!