Самый быстрый / самый эффективный способ рисовать движущиеся речевые пузыри на экране - CoreAnimation, Quartz2D? - PullRequest
3 голосов
/ 27 января 2010

Я добавляю некоторые функции в приложение для iPhone и могу использовать некоторую помощь в выборе самого быстрого / самого эффективного / наилучшего практического подхода для решения этой проблемы:

В верхней части моего экрана у меня есть речевые пузыри (например, комиксы), которые представляют собой UIImageViews, транслирующие по экрану (динамическая позиция x & y). Это UIImageView, потому что в качестве фона речевого пузыря используется изображение.

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

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

Я уже сделал все отслеживание и нарисовал линию с помощью методов CGContextStrokePath, и теперь я застрял на том, как заменить линию треугольником.

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

Одна идея, которую я имею, состоит в том, чтобы самостоятельно выполнить тригонометрию и растянуть и повернуть изображение треугольника, чтобы соединить каждый из этих речевых пузырьков с нижней точкой. Что-то говорит мне, что есть более эффективное / более элегантное решение, но я не вижу его, просматривая документацию. Любая помощь в том, как у вас есть или будет подходить к этому вопросу, приветствуется. Спасибо.

1 Ответ

0 голосов
/ 01 мая 2012

Если речевые пузыри имеют фиксированный размер, просто используйте статический UIImage. Установите свойство layer.position вида изображения в точке треугольника. Затем вы можете использовать анимацию просмотра, чтобы перемещать пузыри.

Если вам нужны речевые пузыри разных размеров, я бы создал изображение с изменяемым размером, используя resizableImageWithCapInsets. Тогда я бы сделал то же самое, что и выше, чтобы расположить его.

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

...