вращение наложения в iphone - PullRequest
1 голос
/ 03 февраля 2011

У меня есть оверлейный вид (который имеет нарисованные самостоятельно формы), который я отображаю поверх ImageView. Я хочу, чтобы вид был подвижным, изменяемого размера и вращающимся. Я мог бы позволить пользователю перемещать оверлей, перетаскивая его из середины, или изменять его размер, перетаскивая его с одной из двух сторон (справа или снизу). Что я до сих пор не мог сделать, так это позволить пользователю вращать его, перемещая левый верхний край.

myView.transform = CGAffineTransformMakeRotation(angle * M_PI / 180);

Но как я могу вычислить угол на основе касаний пользователя? Есть идеи?

1 Ответ

2 голосов
/ 03 февраля 2011

Самый простой способ - использовать UIRotationGestureRecognizer, который дает вам значение поворота в качестве свойства.

Если вы не можете использовать распознаватель жестов, попробуйте что-то вроде этого (не проверено):

// Assuming centerPoint is the center point of the object you want to rotate (the rotation axis),
// currentTouchLocation and initialTouchLocation are the coordinates of the points between 
// which you want to calculate the angle.
CGPoint centerPoint = ...
CGPoint currentTouchLocation = ...
CGPoint initialTouchLocation = ...

// Convert to polar coordinates with the centerPoint being (0,0)
CGPoint currentTouchLocationNormalized = CGPointMake(currentTouchLocation.x - centerPoint.x, currentTouchLocation.y - centerPoint.y);
CGPoint initialTouchLocationNormalized = CGPointMake(initialTouchLocation.x - centerPoint.x, initialTouchLocation.y - centerPoint.y);

CGFloat angleBetweenInitialTouchAndCenter = atan2(initialTouchLocationNormalized.y, initialTouchLocationNormalized.x);
CGFloat angleBetweenCurrentTouchAndCenter = atan2(currentTouchLocationNormalized.y, currentTouchLocationNormalized.x);

CGFloat rotationAngle = angleBetweenCurrentTouchAndCenter - angleBetweenInitialTouchAndCenter;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...