Вы должны установить преобразование контекста так, чтобы оно соответствовало преобразованию вашего imageView до того, как вы начнете рисовать в нем.
т.е.,
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, boundingRect.size.width/2, boundingRect.size.height/2);
transform = CGAffineTransformRotate(transform, angle);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(context, transform);
// Draw the image into the context
CGContextDrawImage(context, CGRectMake(-imageView.image.size.width/2, -imageView.image.size.height/2, imageView.image.size.width, imageView.image.size.height), imageView.image.CGImage);
// Get an image from the context
rotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
и извлечение Создание UIImage из повернутого UIImageView .
РЕДАКТИРОВАТЬ: если вы не знаете угол поворота изображения, вы можете получить преобразование из свойства слоя UIImageView:
UIGraphicsBeginImageContext(rotatedImageView.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform transform = rotatedImageView.transform;
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(context, transform);
// Draw the image into the context
CGContextDrawImage(context, CGRectMake(0, 0, rotatedImageView.image.size.width, rotatedImageView.image.size.height), rotatedImageView.image.CGImage);
// Get an image from the context
UIImage *newRotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
UIGraphicsEndImageContext();
Вам нужно будет поиграться с матрицей преобразования, чтобы центрировать изображение в контексте, а также вам нужно будет рассчитать ограничивающий прямоугольник для повернутого изображения, или оно будет обрезано по углам (то есть rotatedImageView.image.size. недостаточно велик, чтобы охватить повернутую версию).