Изменение точки привязки и последующее вращение с помощью CGAffineTransformMakeRotation

Я пытаюсь повернуть UIView вокруг другой точки привязки. Когда я впервые создаю UIView, я устанавливаю точку привязки на (0,0, 0,5). Я поворачиваю вид с помощью CGAffineTransformMakeRotation. Когда я нажимаю на другую сторону UIView, я хочу установить точку привязки на (1.0, 0.5). Это перемещает UIView, чтобы установить точку привязки в центральную точку. Я читал в других ответах, что я должен сделать это: «умножьте ширину и высоту границ на нормализованные значения старого и нового anchorPoint, возьмите разницу между двумя anchorPoints и примените эту разницу к положению слоя»

Я пробовал это, но я не могу установить UIView в такое же положение. Используя этот код:

self.transform = CGAffineTransformTranslate(self.transform, self.bounds.size.width, 0);

Установите его в такое же положение, но. Когда я снова вращаюсь (он должен вращаться вокруг новой точки привязки), он переворачивает UIView или происходит что-то странное.


person Basel    schedule 11.03.2011    source источник


Ответы (1)


Когда вы перемещаете представление из-за изменения точки привязки, постарайтесь не использовать свойство transform. Вместо этого переместите представление с помощью свойства frame или свойства center (или position, если вы работаете с объектом CALayer). Кроме того, можете ли вы опубликовать дополнительный код, показывающий, как именно повернуть представление?

person MHC    schedule 11.03.2011
comment
Я вращаюсь с помощью theAngle = atan2 (pointofTouch.y - self.center.y, pointofTouch.x - self.center.x); totalRadians = theAngle; self.transform = CGAffineTransformMakeRotation (радианы); Мне никогда не приходилось перемещать вид в то же самое положение, используя рамку или центр. Кроме того, мне удалось частично исправить проблему, используя self.transform = CGAffineTransformRotate (self.transform, totalRadians - oldRadians); После перевода. но это не обновляет центр, поэтому я поворачиваю вид вокруг правильной точки привязки, но из другого центра (центр никогда не обновляется). - person Basel; 12.03.2011
comment
Я знаю, как вы использовали перевод, потому что вы четко объяснили этот момент в исходной публикации. Я просто говорил, что иногда лучше перемещать фрейм (когда вы делаете только переводы), потому что преобразование без идентичности делает свойство фрейма недоступным (но, по общему признанию, это не имеет отношения к этому случаю). Что ж, просто рад, что вы устранили проблему. В следующий раз предоставьте дополнительную информацию (нет возможности исправить totalRadians-oldRadians из вашего исходного вопроса) о ситуации, и вы решите проблему еще быстрее =) - person MHC; 12.03.2011