Depuis l'affichage de la rétine, ce morceau de code de dessin semble soudainement ne plus fonctionner. L'image dessinée est légèrement décalée par rapport à la précédente et semble un peu étirée.Dois-je multiplier l'échelle avec les valeurs de points pour l'affichage de la rétine, dans ce cas?
Je dessine quelque chose dans la méthode -drawRect: d'une sous-classe UIControl. J'ai compris que l'échelle actuelle à l'intérieur de ce UIControl est en effet 2.0. Ce code obtient une CGImage d'un UIImage, qui ne connaîtra probablement rien de l'échelle. Il est alimenté en tant que paramètre d'une méthode qui prend également des valeurs de points en ce moment.
CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);
Remarque: drawingRect est en points. img.size.width à l'intérieur d'un NSLog génère la valeur correcte en points, tandis que [img CGImage] génère l'image @ 2x pour l'affichage Retina. Je l'ai fait un chèque pour vérifier:
NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));
sortie dans la console: image height = 31.000000 (CGImage = 62)
Comment puis-je faire face à l'image @ 2x ici? Dois-je multiplier chaque valeur avec l'échelle, manuellement? Mais ce serait aussi bousiller le rectangle visible sur l'écran, ou non?
Pour ne pas minimiser votre question, mais en cas de doute, je le lance dans le simulateur comme "iPhone/iPad (Retina)", puis de nouveau comme "iPhone/iPad". Parfois, je capture chacun d'eux à des fins de comparaison. –