iPhone: вращение рисунка без поворота вида, в котором он нарисован - PullRequest
0 голосов
/ 29 августа 2010

Любой, кто прошел через класс Stanford CS193P в iTunes, узнает это из Назначения 3 (HelloPoly).Для тех, кто не знаком:

У меня есть пользовательское представление polyView, экземпляр PolygonView, подкласс UIView.В этом представлении я использую CGContextDrawLinearGradient для рисования цветового градиента по всему прямоугольному виду.Затем я использую CGContextDrawPath для обводки и заливки многоугольника в границах polyView.И у меня есть UILabel с именем nameLabel в центре представления (и многоугольника), который отображает имя многоугольника (треугольник, четырехугольник, пятиугольник и т. Д.).Все это прекрасно работает, и код для всего этого находится в - (void) метод drawRect класса PolygonView.

Я столкнулся с проблемой с дополнительным требованием вращать многоугольник в представлении.в ответ на жесты пользователя.Я использовал CGAffineTransformRotate () в ответ на события touchesBegan () и touchesMoved () в классе PolygonView, и это тоже в принципе работает.Но я могу вращать только весь PolyView, а не только нарисованный на нем многоугольник.Я уверен, что мог бы вернуться и пересчитать путь многоугольника и перерисовать / заполнить путь в ответ на каждое событие touchesMoved (), но это будет дорого и не может быть лучшим методом.Как я могу использовать CGAffineTransformRotate, чтобы вращать только многоугольник, не поворачивая градиентный вид или метку в центре?

Или есть какой-то способ создать многоугольник на слое, который я могу поместить поверх фонаpolyView под желаемым углом поворота?

Спасибо за любую помощь, вы можете помочь новичку здесь!

Duane

1 Ответ

0 голосов
/ 29 августа 2010

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

...