Установить центральную точку UIView после CGAffineTransformMakeRotation - PullRequest
4 голосов
/ 25 декабря 2010

У меня есть UIView, который я хочу, чтобы пользователь мог перетаскивать по экрану.

-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{
    CGPoint pt = [[touches anyObject] locationInView:self];

    CGPoint center = self.center;

    CGFloat adjustmentX = pt.x - startLocation.x;
    CGFloat adjustmentY = pt.y - startLocation.y;

   center.x += adjustmentX;
   center.y += adjustmentY;

   [self setCenter:center];
}

работает отлично, пока я не применю преобразование к представлению следующим образом:

self.transform = CGAffineTransformMakeRotation(....);

Однако после применения преобразования перетаскивание UIView приводит к перемещению вида с экспоненциальным спиральным эффектом.

Я предполагаю, что должен внести поправку в поворот в методе touchesMoved, но пока все попытки ускользнули от меня.

1 Ответ

1 голос
/ 26 декабря 2010

Вам необходимо преобразовать преобразование в новые координаты, поскольку преобразование, отличное от идентификатора, назначено вашему представлению, и перемещение его центра изменяет результаты преобразования.

Попробуйте это вместо изменения центра вашего представления

self.transform = CGAffineTransformTranslate(self.transform, adjustmentX, adjustmentY);
...