Я работаю над приложением для рисования.
Я хочу, чтобы пользователь мог «перетаскивать» фигуру на экран, а затем перемещать, изменять ее размер или поворачивать по своему желанию.
Проблема заключается в повороте.У меня отлично работает перемещение и изменение размера.
Я делал это раньше с довольно сложным и интенсивно использующим память процессом, который я сейчас пытаюсь улучшить.
Я искал иискал, но не нашел ответа, похожего на то, что я пытаюсь сделать.
По сути, скажем, пользователь отбрасывает квадрат на "поверхности".Затем они касаются его и получают несколько ручек.Они могут касаться в любом месте и перемещаться, чтобы переместить квадрат вокруг (уже работает), коснуться и перетащить ручку изменения размера, чтобы изменить размер квадрата (уже работает), или захватить ручку вращения, чтобы квадрат вращался вокруг своего центра.
Я посмотрел, как нарисовать квадрат с помощью UIBezierPath или просто заполнил его подклассом UIView.
В любом случае я пытаюсь повернуть сам UIView, а не содержимое внутри.Каждый раз, когда я пытаюсь повернуть вид, либо ничего не происходит, вид исчезает с экрана, либо он немного поворачивается и останавливается.
Вот часть кода, который я пробовал (это не работает,и я пробовал много разных подходов к этому):
- (void) rotateByAngle:(CGFloat)angle
{
CGPoint cntr = [self center];
CGAffineTransform move = CGAffineTransformMakeTranslation(-1 * cntr.x, -1 * cntr.y);
[[self path] applyTransform:move];
CGAffineTransform rotate = CGAffineTransformMakeRotation(angle * M_PI / 180.0);
[[self path] applyTransform:rotate];
[self setNeedsDisplay];
CGAffineTransform moveback = CGAffineTransformMakeTranslation(cntr.x, cntr.y);
[[self path] applyTransform:moveback];
}
В случае, если это не очевидно, мысль здесь, чтобы переместить представление в начало координат (0,0), вращаться вокругэту точку, а затем переместите ее назад.
Если вам интересно, «угол» рассчитывается правильно.Я также обернул приведенный выше код в блок [UIView beginAnimations:nil context:NULL]
/ [UIView commitAnimations]
.
Можно ли повернуть UIView на "пользовательскую" сумму?Я видел / делал это раньше, когда я анимировал элемент управления для вращения, но в этих примерах элемент управления всегда заканчивал «квадратом» (то есть он вращал 1 или более полных кругов и возвращался к своей начальной ориентации).
Можно ли выполнить это вращение "в реальном времени" в ответ на UITouches?Нужно ли рисовать квадрат как элемент в слое UIView и вместо этого вращать слой?
Просто чтобы вы знали, что раньше я работал с формой, нарисованной набором линий или UIBezierPaths
.Я бы применил CGAffineTransform
к данным, а затем вызвал метод drawRect:, который перерисовал бы объект внутри пользовательского UIView.Этот UIView будет содержать целый ряд этих элементов, каждый из которых необходимо будет перерисовывать всякий раз, когда один из них понадобится.
Итак, я пытаюсь сделать приложение более производительным, создав кучуподклассов UIView, которые получат команду для перерисовки, когда пользователь что-то с ними сделает.Apple Keynote для iPad, кажется, выполняет это с помощью UIGestureRecognizer, так как вам нужно использовать два пальца, чтобы вращать добавленную форму.Это путь?
Мысли?
Спасибо!