2011-12-03 46 views
1

我想在我的UIView子類上繪製一個矩形,並且除線條的寬度加倍外,所有東西都在工作(我使用的是iPhone模擬器atm,Retina版本)。在iPhone上用Core Graphics繪製一個矩形

這是drawRect方法:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect innerRect = CGRectInset(rect, 5, 5); 
    CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]); 
    CGContextSetLineWidth(context, 2); 
    CGContextMoveToPoint(context, CGRectGetMinX(innerRect), CGRectGetMinY(innerRect)); 
    CGContextAddLineToPoint(context, CGRectGetMaxX(innerRect), CGRectGetMinY(innerRect)); 
    CGContextAddLineToPoint(context, CGRectGetMaxX(innerRect), CGRectGetMaxY(innerRect)); 
    CGContextAddLineToPoint(context, CGRectGetMinX(innerRect), CGRectGetMaxY(innerRect)); 
    CGContextClosePath(context); 
    CGContextStrokePath(context); 
} 

此代碼繪製一個矩形在正確的位置,但與寬度4像素,而不是指定的2px的。

尋找在互聯網上,我看我可能需要設置比例因子,所以我嘗試添加:

self.contentScaleFactor = [UIScreen mainScreen].scale; 
    self.layer.contentsScale = [UIScreen mainScreen].scale; 

在方法的開始,當沒有工作,我想:

self.contentScaleFactor = 2; 
    self.layer.contentsScale = 2; 

(如2是應該由對視網膜顯示scale方法返回的數) 而這也不能工作。

這只是模擬器的一個問題,當我在設備上運行它時會被修復嗎? (我把它升級到5.1,但忘了更新Xcode,所以我現在2小時進入7小時等待Xcode更新完成下載)

還是有東西我失蹤了?

+0

您可以使用[CGContextStrokeRectWithWidth函數]保存大量代碼(http://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#// apple_ref/C/FUNC/CGContextStrokeRectWithWidth)。 –

+0

@PeterHosey,我知道,我實際上畫了一個圓角矩形,我剛剛擺脫了弧線代碼並簡化了座標,使問題更容易閱讀。 –

回答

3

這是正確的行爲。

您正在指定2點(而不是像素)的寬度。在標準屏幕上可以轉換爲2像素,但在視網膜顯示器上轉換爲4像素。您還應該注意,您傳遞的矩形的大小不會隨標準或視網膜而改變。 Apple鼓勵使用點而不是像素來完成繪圖。

一個很好的參考是「WWDC 2011會議129 - 適用於iOS開發人員的實用繪圖」視頻。雖然視頻作爲一個整體提供了豐富的內容,但是你談論的內容始於大約10:24到視頻。

+0

感謝您的回答,我知道關於點 - >像素,我對它走向哪個方向感到困惑:) –

+0

22:11視頻中有更多像素完美繪圖。 – bentford