2013-02-26 86 views
6

這是我的代碼:的CALayer:單個像素行看起來像2個像素

int columns 3; 
int columnWidth = self.layer.bounds.size.width/3; 

for (int c = 1; c < columns; c++) { 
    CALayer *layer = [CALayer layer]; 
    layer.frame = (CGRectMake(columnWidth * c + 0.5, 0.5, 1, self.layer.bounds.size.height)); 
    layer.backgroundColor = myColor; 
    [grid addSublayer:layer]; 
} 

我明白,我必須在X和Y 0.5像素,這是我做了什麼轉變,但它仍然顯示爲2像素行,而不是1。

enter image description here

+0

請記住,在Retina設備上,1點= 2像素。 – 2013-02-26 18:39:40

+0

@ H2CO3 - 我不在視網膜上,但要記住是很好的。如何區分兩者?有沒有一個常數?我想也許可可會自動做所有的翻譯。但那是另一個主題。 – Wesley 2013-02-26 18:41:05

+0

你在哪裏畫線?我只看到一個寬度設置爲奇怪值1的矩形(layer.frame)。 – AlexWien 2013-02-26 18:41:28

回答

2

設置層Frame作爲

layer.frame = (CGRectMake(columnWidth * c + 0.5, 0.5, 0.5, self.layer.bounds.size.height)); 

是啊,很會爲視網膜工作也

入住這post1點線和像素邊界。它很好地解釋有

+0

感謝您的鏈接! – Wesley 2013-02-26 19:05:50

+0

快樂編碼:) – 2013-02-26 19:06:30

+1

我不喜歡鏈接中的解釋,所以我創建了一個顯示原理的插圖。 – nielsbot 2013-02-26 19:42:08

19

我繼續作了解釋性的畫面,如果是有幫助的人

enter image description here

的確切像素較低的線座標,將看起來模糊...線的寬度各佔一半位於不同行的像素...

上面一行被line_width/2.0所抵消,並且看起來很清晰......它完全位於一行像素內。

+1

謝謝你這個有力的解釋! – Wesley 2013-02-27 10:09:36