Я работаю над графическим приложением.Повернуть UIView на основе UITouch
Я хочу, чтобы пользователь мог «опустить» фигуру на экране, а затем перемещать, изменять размер или поворачивать ее по своему желанию.
Проблема с поворотом. У меня есть движущийся и изменяющий размер рабочий режим.
Я сделал это раньше с довольно сложным процессом с интенсивным использованием памяти и процессора, который я сейчас пытаюсь улучшить.
Я искал и искал, но не нашел ответа, аналогичного тому, что я пытаюсь сделать.
В принципе, допустим, пользователь набрасывает квадрат на «поверхность». Затем они нажимают на него и получают несколько ручек. Они могут касаться где угодно и кастрюлю, чтобы переместить квадрат вокруг (работая уже), коснуться и перетащить ручку изменения размера, чтобы изменить размер квадрата (уже работая) или захватить ручку поворота, чтобы квадрат вращался вокруг его центра.
Я просмотрел квадрат с использованием 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 или более полных кругов и возвращался к начальной ориентации).
Можно ли выполнить это вращение «в режиме реального времени» в ответ на UITouch? Нужно ли рисовать квадрат как элемент в слое UIView и вместо этого поворачивать слой?
Просто, чтобы вы знали, что я работал раньше, была форма, нарисованная набором строк или UIBezierPaths
. Я бы применил CGAffineTransform
к данным, а затем вызывается метод drawRect:, который будет повторно рисовать объект внутри пользовательского UIView. В этом UIView будет размещено довольно много этих элементов, все из которых необходимо будет перерисовать в любое время, когда это понадобится одному из них.
Итак, я пытаюсь сделать приложение более совершенным, создав кучу подклассов UIView, которые получат команду повторно рисовать, когда пользователь что-то делает с ними. Apple Keynote для iPad, похоже, выполняет это с использованием UIGestureRecognizers, так как вы должны использовать два пальца для поворота добавленной фигуры. Это путь?
Мысли?
Спасибо!
Пример приложения Apple [Touches_GestureRecognizers] (http://developer.apple.com/library/ios/#samplecode/Touches/Introduction/Intro.html) (а не Touches_Classic) показывает, как использовать панорамирование, зажим и поворот распознаватели жеста сделать все это легко. – Anna
Yup ... Я нашел, что через 10 минут после публикации этого. Я отправил это после примерно 6 часов поиска. Сожалею. – mbm29414