2013-05-01 93 views
0

我有一個執行的drawRect:CGContext上不保留渲染線

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    if (self.colorToRender) 
    { 
     CGContextSetStrokeColorWithColor(ctx, self.colorToRender.CGColor); 
    } 
    else 
    { 
     CGContextSetStrokeColorWithColor(ctx,[UIColor whiteColor].CGColor); 
    } 

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, self.center.x, self.center.y); 
    CGContextAddLineToPoint(ctx, self.pointToRender.x, self.pointToRender.y); 
    CGContextStrokePath(ctx); 
} 

這使得每次的線路,但呈現的線條從來沒有離開過屏幕。

我該如何渲染一個新行來保持先前渲染的行?

+1

最有可能您的視圖的clearsContextBeforeDrawing標誌設置(這是默認的,並且它也被默認選中在廈門國際銀行) - > http://developer.apple.com/library/ios/documentation/UIKit/參考/ UIView_Class/UIView/UIView.html#// apple_ref/occ/instp/UIView/clearsContextBeforeDrawing – borrrden 2013-05-01 09:41:39

回答

0

drawRect在每次視圖需要繪製時被調用。如果要繪製多條線,則必須在drawRect方法中再次繪製每條線。

添加一行時,將該行添加到可在drawRect方法中使用的數組中,以確定要繪製的行。

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    if (self.colorToRender) 
    { 
     CGContextSetStrokeColorWithColor(ctx, self.colorToRender.CGColor); 
    } 
    else 
    { 
     CGContextSetStrokeColorWithColor(ctx,[UIColor whiteColor].CGColor); 
    } 


    // For each line you want to draw: 
    for (MyLine *thisLine in myLines) { 
     CGContextMoveToPoint(ctx, thisLine.startPoint.x, thisLine.startPoint.y); 
     CGContextAddLineToPoint(ctx, thisLine.endPoint.x, thisLine.endPoint.y); 
     CGContextStrokePath(ctx); 
    } 

} 
+0

我爲每一行調用了setNeedsDisplay,並且現在我在view的initWithFrame方法中將clearContextBeforeDrawing設置爲NO。我得到相同的結果。我最終使用了BiezerPath,似乎效果更好。 – jarryd 2013-05-01 09:59:59

+0

@ Helium3你確定自己正在調用,而不是'initWithCoder:'(即來自XIB)? – borrrden 2013-05-01 10:06:56

+0

我在代碼中創建UIView。 – jarryd 2013-05-01 13:39:50