Плавная анимация с использованием drawRect: и UIPanGestureRecognizer - PullRequest
1 голос
/ 28 марта 2012

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

Я рисую диаграмму для моего подкласса UIView в drawRect :. Затем я использую UIPanGestureRecognizer для перевода смещения диаграммы (внутреннего, а не в иерархии представления) вправо / влево. Это прекрасно работает, но моя проблема в том, что действие распознавателя запускается с относительно низкой частотой. В частности, результирующее панорамирование НАМНОГО более изменчиво, чем, скажем, в просмотре прокрутки или просмотре таблицы. Особенно, когда количество точек на моем графике увеличивается. Теперь я хотел бы не запускать рисование из действия жеста панорамирования, а иметь таймер, запускающий примерно 30 раз в секунду, интерполируя смещение от момента, когда панорама сработала, до текущего момента. Однако это становится все более и более сложным.

У кого-нибудь есть предложения? Должен ли я действительно делать это с UIScrollView? Причина, по которой я предпочитаю не делать этого, заключается в том, что данные могут простираться довольно далеко в любом направлении, и я бы хотел не рисовать (или, по крайней мере, хранить) весь путь сразу, а просто сделать раздел, который в настоящее время отображается. Должен ли я использовать CAShapeLayer? Я хотел бы получить некоторую информацию, прежде чем я проведу еще один день, играя с этими возможностями ...

Любой вклад / опыт будет приветствоваться.

1 Ответ

1 голос
/ 31 марта 2012

Итак, в конце концов, я ДОЛЖЕН в итоге поместить эти вещи в UIScrollView.Мне нужно было проделать немалую работу, чтобы все заработало, сложная часть заключалась в создании серии PANES, которые были бы добавлены в представление прокрутки.Каждая панель запрашивает у делегата данные, которые нужно нарисовать, а затем все они объединяются.К счастью, все работало отлично, когда я поместил эти виды прокрутки, содержащие панели диаграмм, в представление таблицы.До сих пор не занимался масштабированием, но я видел несколько постов, которые должны сделать его относительно тривиальным.

Так что это ответ на мой первоначальный вопрос.Не пытайтесь панорамировать и рисовать на каждом кадре, это БУДЕТ изменчивым, и за исключением некоторого реального взлома, я не нашел хорошего способа сгладить его.Представление прокрутки решает все эти проблемы за вас, до тех пор, пока вы можете красиво разделить свое представление.Полагаю, я мог бы использовать одно длинное представление, но затем, когда набор данных становится большим, у меня проблемы.

Теперь у меня возникла связанная с этим проблема - когда прокручиваемые в экранном виде диаграммы (в UITableViewCells), есть большая ошибка, поскольку новая диаграмма рисуется.Я думаю, что я попытаюсь нарисовать их в изображение асинхронно, чтобы, когда новая строка прокручивается в поле зрения, я уже получил изображение.

...