Retina ディスプレイになってから、突然、この描画コードが機能しなくなったようです。描画されたイメージは以前よりもわずかにずれており、多少引き伸ばされているように見えます。
UIControl サブクラスの -drawRect: メソッドで何かを描画しています。そのUIControl内の現在のスケールは実際には2.0であることがわかりました。このコードは UIImage から CGImage を取得しますが、UIImage はおそらくスケールについて何も知りません。現在、いくつかのポイント値も取るメソッドにパラメータとして供給されます。
CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);
注: drawingRect はポイント単位です。NSLog 内の img.size.width は正しい値をポイント単位で出力しますが、[img CGImage] は Retina ディスプレイ用に @2x 画像を出力します。これを確認するためにチェックを行いました:
NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));
コンソールでの出力:image height = 31.000000 (CGImage = 62)
ここで @2x 画像をどのように処理しますか? すべての値にスケールを手動で掛ける必要がありますか? しかし、それはまた、画面上に実際に表示されている長方形を台無しにするでしょうか?