Самый быстрый / самый эффективный способ рисования движущихся речевых пузырей на экране - CoreAnimation, Quartz2D?

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

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

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

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

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

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

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


person KLC    schedule 27.01.2010    source источник
comment
Вы также можете проверить - [CALayer setContents: (id) someCGImageRef] как более быструю (но немного хакерскую) вещь вместо UIImageView ...   -  person Grant Paul    schedule 27.01.2010


Ответы (1)


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

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

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

person Duncan C    schedule 30.04.2012