2010-10-02 64 views
0

我想畫我的自定義的UIView裏面的一些線條畫時收到錯誤。試圖與UIBezierPath

從我所看到的,救與CoreGraphics中亂搞,我可以使用UIBezierPath(我在Mac上做了類似與NSBezierPath)。 我有一些代碼嘗試繪製線條,但我得到輸出錯誤,無法找到一些體面的參考與一些示例代碼來說明發生了什麼,有什麼想法?下面 代碼...

代碼:

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    UIBezierPath *line1 = [UIBezierPath bezierPath]; 
[[UIColor blackColor] setStroke]; 
[line1 setLineWidth:3]; 
[line1 moveToPoint:CGPointMake(0, 0)]; 
[line1 addLineToPoint:CGPointMake(320, 480)]; 
[line1 stroke]; 

} 

錯誤:

Sat Oct 2 19:26:43 mercury.config mobileManual[46994] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0 

更新:這是當前的代碼,沒有錯誤,但也沒有拉..想法?

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.view setBackgroundColor:[UIColor yellowColor]]; 
    [self.view setNeedsDisplay]; 
} 

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    UIBezierPath *line1 = [UIBezierPath bezierPath]; 
    [line1 setLineWidth:3]; 
    [line1 moveToPoint:CGPointMake(0, 0)]; 
    [line1 addLineToPoint:CGPointMake(320, 480)]; 
    [line1 stroke]; 
    CGContextRestoreGState(context); 
} 
+0

我只是想你更新的代碼和它的工作就像一個魅力。要明確,drawRect:在你的UIView子類上,而viewDidLoad在你的UIViewController子類上,對嗎? – 2010-10-02 23:41:32

+0

大聲笑是的,但只有一次,我意識到我不得不繼承UIView並重寫drawRect。現在都很好。感謝您指點道路。 – Cocoadelica 2010-10-03 11:53:03

回答

2

就像我上面說的,你的代碼工作對我罰款。

你改變界面生成器視圖的「階級」到你的UIView子類?

(如viewDidLoad中順便說一句,叫setNeedsDisplay是不必要的,但它也沒有傷害任何東西。)

+0

_Class Identity_是問題,這是非常令人驚訝的。如果沒有正確設置,_drawRect:_根本不會被調用。但是函數中有很多錯誤消息(請參閱原始問題)。 – Codo 2010-10-03 14:19:00

1

您的圖形上下文無效。發生這種情況的原因是:

  • 你自己叫drawRect:自己。永遠不要這樣做。改爲撥打setNeedsDisplay,然後讓iOS調用它。
  • 你以某種方式破壞了當前的圖形上下文(不太可能)。
+0

啊這是有道理的。謝謝。 UIGraphicsGetCurrentContext()的語法是什麼? – Cocoadelica 2010-10-02 18:57:11

+0

在上面的問題中看到更新的代碼,關於我沒有正確處理這個問題的想法?我沒有錯誤,但沒有繪製。 – Cocoadelica 2010-10-02 20:16:36

+0

-1。你不需要調用UIGraphicsGetCurrentContext(); - [UIColor setStroke]爲您做到這一點。 – 2010-10-03 01:15:33