Problème d’inversion des systèmes de coordonnées entre CoreGraphics et UIKit
Afficher une image, pas de problèmes… Tracer des traits, pas de problèmes…
Faire les deux en même temps, début des soucis : l’image est inversée par rapport aux traits ! (ou l’inverse suivant le sens dans lequel on regarde…). En effet, le système de coordonnées utilisé par CoreGraphics est inversé par rapport au système de coordonnées utilisé par UIKit.
Une solution (il y en a surement d’autres !) est la suivante :
CGContextRef graphicsContext = UIGraphicsGetCurrentContext(); CGRect imageRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height); CGLayerRef layer = CGLayerCreateWithContext(graphicsContext, image.size, nil); CGContextRef layerContext = CGLayerGetContext(layer); UIGraphicsPushContext(layerContext); [image drawInRect:imageRect]; UIGraphicsPopContext(); CGContextDrawLayerInRect(graphicsContext, imageRect, layer); // Ligne qui traverse l'écran du coin en haut à gauche jusqu'en bas à droite CGContextSetRGBStrokeColor(graphicsContext, 1.0, 0.0, 0.0, 1.0); CGContextSetLineWidth(graphicsContext, 4.0); CGContextBeginPath(graphicsContext); CGContextMoveToPoint(graphicsContext, 0.0, 0.0); CGContextAddLineToPoint(graphicsContext, 320.0, 480.0); CGContextStrokePath(graphicsContext);
On passe par un layer et par un context intermédiaire pour tracer notre image en utilisant simplement le drawInRect. Le PushContext et PopContext sont ici très pratiques…
Aucun commentaire pour l'instant