Как перевернуть CGImageRef по оси Y

Я пытаюсь анимировать спрайт, используя только CoreAnimation. Пока это работает, за исключением того, что я не могу понять, как перевернуть лист спрайтов.

Прямо сейчас у меня есть анимация ходьбы, но я хочу, чтобы спрайт смотрел в том направлении, в котором он идет (потому что это выглядит глупо, если идти назад).

Думаю, я мог бы добавить перевернутые изображения на лист спрайтов, но я бы предпочел этого избежать, потому что это может сделать его действительно большим, когда я решу добавить больше.

Прямо сейчас мой спрайт расширяет CALayer, и я установил его содержимое на CGImageRef, который является листом спрайта:

self.contents = (id) image;

Чтобы перевернуть его, я попытался:

UIImage *tmp = [UIImage imageWithCGImage:image scale:1.0 orientation:UIImageOrientationUpMirrored];
CGImageRef flippedImage = tmp.CGImage;
self.contents = (id) flippedImage;

..и это не работает.

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

Есть ли простой способ сделать это?

Если есть способ перевернуть все CALayer, я бы тоже хотел это знать. знак равно

Спасибо!


person corgichu    schedule 24.05.2013    source источник


Ответы (1)


Вместо того, чтобы переворачивать изображение, вы можете попробовать применить преобразование к объекту слоя. Что-то типа:

self.transform = CATransform3DMakeScale(-1, 1, 1);

Это может быть лучше и для производительности; если спрайт должен идти в противоположном направлении, вы можете просто установить преобразование обратно в CATransform3DIdentity, а не выделять новое изображение и вращать его.

person Nick    schedule 24.05.2013
comment
Замечательно! Есть ли способ отключить анимацию перелистывания? Потому что прямо сейчас он анимирует переворачивание так, как будто вы переворачиваете лист бумаги. - person corgichu; 25.05.2013