Как перевернуть координаты при рисовании в контексте?

Я создаю контекст из UIImage, а затем я вхожу в него с

CGContextDrawImage(bitmapContext,
                   CGRectMake(0, 0,
                              originalImage.size.width,
                              originalImage.size.height),
                   oImageRef); 

изображение отображается вверх ногами из-за перевернутой системы координат в кварце. Как я могу это исправить?

2 ответов


вы должны иметь возможность преобразовать контекст, используя что-то подобное следующему:

CGContextSaveGState(bitmapContext);
CGContextTranslateCTM(bitmapContext, 0.0f, originalImage.size.height);
CGContextScaleCTM(bitmapContext, 1.0f, -1.0f);

// Draw here
CGContextDrawImage(bitmapContext, CGRectMake(0, 0, originalImage.size.width, originalImage.size.height), oImageRef);

CGContextRestoreGState(bitmapContext);

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


бред решение как расширение в Swift 3:

extension CGContext {
    func drawFlipped(image: CGImage, rect: CGRect) {
        saveGState()
        translateBy(x: 0, y: rect.height)
        scaleBy(x: 1, y: -1)
        draw(image, in: rect)
        restoreGState()
    }
}