Zelfs na het aanbrengen van alles wat ik heb gezegd, heb ik nog had drama's met de beelden. Op het einde, ik heb net gebruikt Gimp om een 'omgedraaid verticale' versie van al mijn beelden te creëren. Nu heb ik geen behoefte aan een Transformaties gebruiken. Hopelijk zal dit niet verder problemen op het spoor veroorzaken.
Weet iemand waarom CGContextDrawImage mijn beeld ondersteboven zou tekenen? Ik ben het laden van een afbeelding uit mijn toepassing:
Quartz2d gebruikt een andere coördinatenstelsel, waarbij de oorsprong van de linker benedenhoek. Toen Quartz trekt beeldpunt x [5], y [10] van het 100 * 100, is dat beeldpunt in de linkerbenedenhoek plaats van linksboven opgesteld. Waardoor voor de 'omgedraaid' imago.
De x-coördinaat systeem past, dus je moet aan de y-coördinaten te spiegelen.
CGContextTranslateCTM(context, 0, image.size.height);
Dit betekent dat wij het beeld vertaald door 0 eenheden op de x-as en de afbeeldingen hoogte op de y-as. Echter, dit alleen zal betekenen ons imago is nog steeds ondersteboven, gewoon "image.size.height" hieronder waar we willen dat het getrokken te worden getrokken.
De Quartz2D programmagids raadt aan ScaleCTM en doorgeven negatieve waarden naar afbeelding spiegelen. U kunt de volgende code gebruiken om dit te doen -
CGContextScaleCTM(context, 1.0, -1.0);
Combineer de twee vlak voor je CGContextDrawImagebellen en je moet hebben het beeld correct opgesteld.
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
Wees voorzichtig als je imageRect coördinaten niet overeenkomen met die van uw afbeelding, zoals u onbedoelde resultaten kunnen krijgen.
Om terug te zetten de coördinaten:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);