2012-04-23 1 views
5

Я пытался это сделать в течение нескольких дней. Я создаю загрузчик спрайтов, но я также могу загрузить спрайты в противоположном направлении. Это связано с переводом изображений, которые я уже загрузил.Что случилось с тем, как я пытался перевернуть (зеркало) UIImage?

Я уже делал это, используя метод UIImageOrientation/UIImageOrientationUpMirrored, но это абсолютно не влияет и просто рисует кадр с той же ориентацией, что и раньше.

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

Я включил метод ниже (вместе с моими комментариями, чтобы вы могли следовать примеру моей мысли), вы можете видеть, что я делаю неправильно?

- (UIImage*) getFlippedFrame:(UIImage*) imageToFlip 
{ 
//create a context to draw that shizz into 
UIGraphicsBeginImageContext(imageToFlip.size); 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 



//WHERE YOU LEFT OFF. you're attempting to find a way to flip the image in imagetoflip. and return it as a new UIimage. But no luck so far. 
[imageToFlip drawInRect:CGRectMake(0, 0, imageToFlip.size.width, imageToFlip.size.height)]; 

//take the current context with the old frame drawn in and flip it. 
CGContextScaleCTM(currentContext, -1.0, 1.0); 

//create a UIImage made from the flipped context. However will the transformation survive the transition to UIImage? UPDATE: Apparently not. 

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

return flippedFrame; 
} 

Спасибо, Парень.

ответ

6

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

[imageToFlip drawInRect:CGRectMake(0, 0, imageToFlip.size.width, imageToFlip.size.height)]; 
CGContextScaleCTM(currentContext, -1.0, 1.0); 

с (отредактированного на основе комментариев)

CGContextTranslateCTM(currentContext, imageToFlip.size.width, 0);  
CGContextScaleCTM(currentContext, -1.0, 1.0); 
[imageToFlip drawInRect:CGRectMake(0, 0, imageToFlip.size.width, imageToFlip.size.height)]; 

Примечание: Из комментариев, категории использовать

@implementation UIImage (Flip) 
    - (UIImage*)horizontalFlip { 
    UIGraphicsBeginImageContext(self.size); 
    CGContextRef current_context = UIGraphicsGetCurrentContext();       
    CGContextTranslateCTM(current_context, self.size.width, 0); 
    CGContextScaleCTM(current_context, -1.0, 1.0); 
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; 
    UIImage *flipped_img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return flipped_img; 
    } 
@end 
+0

Я раньше пробовал что-то подобное, но я думаю, что я запутался и перевел контекст в неправильном направлении (-imagetoflip.size.width). Я также перевел THEN scaled. Это заставило изображение исчезнуть, когда оно было окончательно нарисовано. Ваше предложение делает то же самое, однако я чувствую, что он помещает меня на правильный путь, поскольку он как минимум изменяет изображение. Возможно, это всего лишь вопрос меня, когда я настраиваю перевод, пока не найду то, что ищу. –

+0

Также, если вы немного знаете о базовой графике, не могли бы вы рассказать мне, почему мы трансформируем контекст? Я бы подумал, что вы втягиваете контекст, а затем трансформируете контекст, чтобы преобразовать их вместе, но это, по-видимому, неверно. –

+0

О, и спасибо. –

Смежные вопросы