2014-11-05 82 views
0

我試圖在視網膜@ 2x顯示器上創建3像素寬度的線。簡單的想法是創建一個1.5寬度線:在視網膜@ 2x顯示器上創建3像素寬度的UIBezierPath

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時,交叉的兩條路徑在我的屏幕上寬度爲3像素。

回答

0

它的工作與:

UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(13, 21, 18, 1.5)]; 
0

我懷疑這是B/C你的路徑是1.5分,但在(0,0)開始。因爲該路徑在路徑的一側被畫成一半,而在另一側被畫成一半,這意味着0.75點被繪製在路徑的上方/下方。

那會意味着你的路徑從(單位:像素)達到:

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

這意味着每方將呈現使用2個像素。

相反,你可能想創建一個從(0.5,0)=>(0.5,10)的線,這將對齊路徑寬度在屏幕上的像素:

left: (-1, 0) => (-1, 10) 
center: (.5, 0) => (.5, 10) 
right: (2, 0) => (2, 10) 
+0

我的錯誤,路徑應該是在圖像的中間。而這仍然沒有改變任何東西。如果我使用1.0的路徑寬度,它將在屏幕上顯示爲2像素。如果我使用2.0的路徑寬度,它將在屏幕上顯示爲4個像素。所以1.5的路徑應該在屏幕上顯示3個像素...... – user3048615 2014-11-08 09:08:17

+0

現在你的路徑在像素之間開始和停止,而你需要將你的路徑對準到te像素的中心。 – 2014-11-09 10:15:22

相關問題