Основная идея
очень легко. Упрощенно можно сказать ... линия, похожая на змею, реализованная, скажем, линией 3px, расширяется по экрану, собирая и взаимодействуя с различными вещами, может управляться с помощью пользовательского ввода. Как непрерывную линию, которую вы бы нарисовали ручкой.
Я уже начал читать документацию Apple по Quartz / CG.
Как я теперь понимаю, мне нужно поместить код рендеринга в drawRect из UIView.
Затем мне нужно было бы установить таймер (нашел некоторые ответы / сообщения тут и там, но ничего конкретного), который срабатывает x раз в секунду и вызывает setNeedsDisplay в UIView.
Вопрос:
Как реализовать следующее:
Имейте целую змею в UIView 1 / (Layer?), Рисуйте новую часть в UIView 2, объединяйте их так, чтобы новая часть добавлялась в UIView 1 (или CALayer вместо views?). Я четко спрашиваю об этом, потому что прочитал, что не следует перерисовывать один и тот же контент снова и снова, а только новую / движущуюся часть.
Я надеюсь, что вы можете предоставить мне некоторый пример кода или некоторые детали, какие классы я должен использовать, и стратегию их использования / какие вызовы сделать.
Редактировать
Хорошо, я вижу, что моя идея или то, что я читал раньше, чтобы реализовать это с помощью Кварца и других взглядов, не так мудры ... ( Даниэль Бляйстайнер )
Итак, я перешел на OpenGL сейчас, я изучаю его, читаю примеры, записи в блоге Джеффа Ламарша по OpenGL и т. Д.
Я думаю, я бы смог нарисовать мою линию. Я думаю, что я создал бы классы для кривых, прямых линий / изменений направления и т. Д., А затем по пользовательскому вводу я бы создал связанные объекты (в зависимости от ввода рулевого управления), сохранил их в массиве, а затем заново создал и перерисовал всю линию, читая свойства объекта из объектов, хранящихся в массиве на каждом кадре. Простую линию, которую я бы нарисовал так (код Beginning iPhone Development)
glDisable(GL_TEXTURE_2D);
GLfloat vertices[4];
// Convert coordinates
vertices[0] = start.x;
vertices[1] = start.y;
vertices[2] = end.x;
vertices[3] = end.y;
glLineWidth(3.0);
glVertexPointer (2, GL_FLOAT , 0, vertices);
glDrawArrays (GL_LINES, 0, 2);
Может быть, я даже найду способ противостоять ему, но
- теперь мне более любопытно, достаточно ли хороша моя идея или есть какие-то лучше разработанные стратегии для этого
- и, возможно, кто-то может сказать мне, как разделить код для hud'а, рисование линии и некоторые меню, которые мне придется отображать, например. в начале ... чтобы можно было легко переходить от одного "вида" к другому (как с исчезновением)? Некоторые намеки?
Может быть, вы также читали книгу, в которой объясняется, как решать подобные проблемы?
Или вы можете указать мне другой хороший код ответа / примера, так как у меня огромные проблемы с поиском примеров "анимированных рисунков".
это привело меня немного дальше, но для меня это все еще немного расплывчато.
Я не знаю, как реализовать «путь обновления, который вы рисуете (только с необходимыми точками + последняя точка, которая движется)»