0

Retina @2x ディスプレイで幅 3 ピクセルの線を作成しようとしています。簡単なアイデアは、1.5 幅の線を作成することです。

UIGraphicsBeginImageContextWithOptions(CGSizeMake(20, 20), NO, 0.0f);
CGContextRef aRef = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(aRef, NO);
CGContextSetShouldAntialias(aRef, NO);
UIBezierPath* bezierPath = UIBezierPath.bezierPath;
[bezierPath moveToPoint: CGPointMake(10, 0)];
[bezierPath addLineToPoint: CGPointMake(10, 10)];
bezierPath.lineWidth = 1.5;
[bezierPath stroke];
UIImage * myImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

しかし、最終的には、画面上に 4 ピクセルの線幅が表示されます。

問題は、iPad 3 (Retina @2x) を使用していて、定義済みのシステム ボタン UIBarButtonSystemItemAdd で UIBarButtonItem を使用すると、十字の 2 つのパスが画面上で 3 ピクセル幅になることです。

4

2 に答える 2

0

あなたのパスは1.5ポイントですが、(0,0)から始まっているのはb/cだと思います。パスはパスの片側に半分、反対側に半分描画されるため、.75 ポイントがパスの上/下に描画されることを意味します。

それはあなたのパスが(pxで)から到達することを意味します:

left:   (-1.5, 0) =>  (-1.5, 10) 
center: (0,0)     =>  (0,10) 
right:  (1.5,0)   =>  (1.5,10)

つまり、各面が 2 ピクセルを使用してレンダリングされます。

代わりに、(.5, 0) => (.5, 10) から線を作成することをお勧めします。これにより、パスの幅が画面上のピクセルに揃えられます。

left:   (-1, 0) =>  (-1, 10) 
center: (.5, 0) =>  (.5, 10) 
right:  (2,  0) =>  (2,  10)
于 2014-11-08T00:00:19.950 に答える