использование UIImage drawInRect по-прежнему отрисовывает его вверх ногами - PullRequest
4 голосов
/ 21 декабря 2010

Я читал некоторые посты на этом сайте об использовании drawInRect вместо методов рисования CGContext. Это все еще тянет это с ног на голову? Я думал, что используя drawInRect напечатает его правой стороной вверх с системой координат, начинающейся в верхнем левом углу?

-(void) drawImage:(UIImage*) image atX:(float) x andY:(float) y withWidth:(float) width andHeight:(float) height onContext:(CGContextRef) context{
UIGraphicsPushContext(context);
[image drawInRect:CGRectMake(x, size.height-y-height, width, height)];
UIGraphicsPopContext();
}

Обратите внимание, что я делаю size.height-y-height, и если я этого не сделаю, он не пойдет туда, где я ожидаю (при условии drawInRect с использованием топографической системы координат). Это делает в правильном месте с вышеупомянутым кодом, но все еще с ног на голову. ПОМОГИТЕ !!!!!!

UPDATE

Благодаря ответу ниже это рабочий метод

-(void) drawImage:(UIImage*) image atX:(float) x andY:(float) y withWidth:(float) width andHeight:(float) height onContext:(CGContextRef) context{
UIGraphicsPushContext(context);
CGContextSaveGState(context); 
CGContextTranslateCTM(context, 0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
[image drawInRect:CGRectMake(x, y, width, height)];
CGContextRestoreGState(context);
UIGraphicsPopContext();
}

1 Ответ

1 голос
/ 21 декабря 2010
    UIGraphicsBeginImageContext(imageViewSize);
CGContextRef imageContext = UIGraphicsGetCurrentContext();

// Draw the image in the upper left corner (0,0) with its actual size
CGContextDrawImage(imageContext, imageViewRect, oldImage.CGImage);

//  As it draws the image from lower right corner, 
//  following code will flip it up side down vertically.


CGContextTranslateCTM(imageContext, 0.0, 0.0);
CGContextScaleCTM(imageContext, 1.0, -1.0);

CGContextDrawImage(imageContext, imageViewRect, oldImage.CGImage);
...