我试图在视网膜@ 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(所以视网膜@ 2x),当我使用带有预定义系统按钮UIBarButtonSystemItemAdd的UIBarButtonItem时,十字架的两条路径在我的屏幕上宽度为3像素。
答案 0 :(得分:0)
我怀疑它的b / c你的路径是1.5分,但是从(0,0)开始。由于路径在路径的一侧绘制了一半,而在另一侧绘制了一半,这意味着.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)
答案 1 :(得分:0)
它适用于:
UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(13, 21, 18, 1.5)];