Найти новые координаты после использования CGAffineTransformMakeRotation на объекте - PullRequest
0 голосов
/ 27 декабря 2011

Это простая проблема, которая меня беспокоит ...

Итак, у меня есть объект UIImageView, над которым я использую

-(void)rotate {

// ...

CGAffineTransform transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180));
self.image.transform = transform; // image is a property.

}

Итак, когда я вызываю этот метод один раз, он вращает объект! Когда я снова вызываю метод, я ожидаю, что объект снова будет вращаться, но он не поворачивается еще на 180 градусов. Поработав с координатами и переместив изображение, я могу понять, что -perspective объекта также был повернут на 180 градусов, и все координаты также были инвертированы.

Я хочу, чтобы перспектива объекта была восстановлена ​​(хотя он был повернут на некоторый угол), чтобы я мог продолжать вращать и перемещать его, как и раньше!

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Решил проблему с CABasicAnimation!

0 голосов
/ 27 декабря 2011

В любом случае, этот код работает:

UIImage* rotateUIImage(const UIImage* src, float angleDegrees)  {   
  UIView* rotatedViewBox = [[UIView alloc] initWithFrame: CGRectMake(0, 0, src.size.width, src.size.height)];
  float angleRadians = angleDegrees * ((float)M_PI / 180.0f);
  CGAffineTransform t = CGAffineTransformMakeRotation(angleRadians);
  rotatedViewBox.transform = t;
  CGSize rotatedSize = rotatedViewBox.frame.size;

  UIGraphicsBeginImageContext(rotatedSize);
  CGContextRef bitmap = UIGraphicsGetCurrentContext();
  CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
  CGContextRotateCTM(bitmap, angleRadians);

  CGContextScaleCTM(bitmap, 1.0, -1.0);
  CGContextDrawImage(bitmap, CGRectMake(-src.size.width / 2, -src.size.height / 2, src.size.width, src.size.height), [src CGImage]);

  UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  return newImage;
}
...