iOS: CAEmitter Layer и EmitterCell переворачивают изображение на iOS 6

Играл с CAEmitterLayer и обнаружил что-то действительно странное.

Я настроил CAEmitterLayer в нижнем левом углу, расположенном под углом 45 градусов (указывающим на верхний правый угол) и пытался стрелять стрелками в верхний правый угол.

Все работало, кроме изображения, которое я установил через content свойство клетки.

Вот оригинальное изображение на устройстве iOS 7:

При запуске на iOS 6 это выглядит так:

Кто-нибудь испытывал это, и знаете ли вы, почему это так? Наличие двух наборов изображений и проверка того, является ли устройство iOS 6 или iOS 7, и настройка изображения соответствующим образом, не проблема для меня, но мое любопытство побуждает меня выяснить, почему это так. Заранее спасибо.

Я использую Xcode 5.

1 ответ

Решение

Это нормальное поведение в CAEmitterLayer. Он использует другую систему координат, чем остальная часть iOS. Поскольку это была технология, основанная на MacOS, ее источник (0,0) расположен внизу слева, в то время как в iOS источник расположен вверху слева. Когда картинка прорисовывается, изображение переворачивается. CAEmitterLayer на самом деле не был предназначен для использования таких изображений, в основном, для систем частиц, которые не требуют определенной ориентации.

Самым простым решением этого было бы перевернуть изображение самостоятельно, поэтому, когда CAEmitterLayer перевернет его снова, оно будет выглядеть так, как вы этого хотите. Возможно, в iOS7 произошли изменения, поэтому вам придется проверить версию и применить правильное изображение.

Вы также можете перевернуть его в коде, если хотите. Это короткий код, который делает это:

UIImage *flippedPicture = [UIImage imageWithCGImage:picture.CGImage scale:1.0 orientation:UIImageOrientationLeftMirrored];

Источник: http://www.vigorouscoding.com/2013/02/particle-image-gets-mirrored-by-uikit-particle-system/

Другие вопросы по тегам