Скопируйте вспомогательные данные и поверните их
Этот вопрос задает общий вопрос о UIImage
немного по-другому.По сути, у вас есть две связанные проблемы - глубокое копирование и ротация.UIImage
- это просто контейнер, имеющий свойство ориентации, которое используется для отображения.UIImage
может содержать свои данные поддержки как CGImage
или CIImage
, но чаще всего как CGImage
.CGImage
- это структура информации, которая включает указатель на базовые данные, и если вы читаете документы, копирование структуры не копирует данные.Итак ...
Глубокое копирование
Как я выясню в следующем параграфе, при глубоком копировании данные будут поворачиваться, потому что изображение поворачивается в базовых данных.
UIImage *newImage = [UIImage imageWithData:UIImagePNGRepresentation(oldImage)];
Это скопирует данные, но потребует установки свойства ориентации, прежде чем передать его что-то вроде UIImageView
для правильного отображения.
Еще один способ глубокого копирования - рисование в контекстезахватить результат.Предположим, что зебра.
UIGraphicsBeginImageContext(zebra!.size)
zebra!.drawInRect(CGRectMake(0, 0, zebra!.size.width, zebra!.size.height))
let copy = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Глубокое копирование и вращение
Поворот CGImage
уже получен ответ.Также бывает, что это повернутое изображение - это новый CGImage
, который можно использовать для создания UIImage
.