2011-04-16 158 views
3

我在viewLoad中使用下面的代碼(我不想在- (void)drawRect:(CGRect)rect中繪製)以便在視圖中添加矩形但不起作用。爲什麼?問題在繪製矩形

CGRect rect=CGRectMake(10,10,150,140); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f}; 
CGContextSetStrokeColor(context, red); 
CGContextBeginPath(context); 
CGContextMoveToPoint(context, 10, 10); 
CGContextAddRect(context, rect); 
CGContextStrokePath(context); 
+0

爲什麼不在drawRect中繪製:? – Jamie 2011-04-16 15:56:29

回答

3

UIGraphicsGetCurrentContext()將在沒有當前上下文時返回nil。在調用drawRect:之前爲您創建一個上下文;如果要手動創建上下文,請使用UIGraphicsBeginImageContextUIGraphicsBeginImageContextWithOptions啓動一個,UIGraphicsGetImageFromCurrentImageContext()以在您完成釋放上下文時提取UIImage和UIGraphicsEndImageContext()。詳情請參閱the documentation

您當然也可以創建CGBitmapContextRef並直接使用CoreGraphics調用而不是UIKit調用。每種方法都有優點和缺點,主要區別在於默認轉換矩陣。

6

只有在繪製上下文時才能繪製。您可以在任何想要創建圖像的位置創建圖像上下文,也可以在內部繪製drawRect:以繪製您的視圖。你不應該在drawRect:之外畫出你的看法。

它可能看起來像你正在獲得一個上下文,但實際上你不是UIGraphicsGetCurrentContext() returns nil outside of drawRect:(或更準確:它只返回drawRect:內的上下文,或者如果你自己創建並推送了一個圖像上下文)。

+0

我以前的評論很愚蠢,沒有很好地閱讀這個問題。正確答案+1。 – Till 2011-04-16 15:59:32