2010-04-05 65 views
0

我有一個場景中使用在iPhone上查看,所謂的testScene,它的工作原理是這樣的:關於更新使用目標C

@interface testScene : myScene { 
IBOutlet UIView *subview; 
IBOutlet UIView *drawingCanvasView; 
IBOutlet UIButton *update; 
} 

- (void)updateDrawingCanvas: (id) sender; 

,當用戶點擊該按鈕,更新,它將運行updateDrawingCanvas方法。 所以,我有一個drawingCanvasView,這給了一個drawingCanvas.h,並且.M,它是這樣的:

#import <UIKit/UIKit.h> 


@interface DrawingCanvasView : UIView { 
CGImageRef image; 

} 

-(void)setNeedsDisplayInRect:(CGContextRef)context; 

@end 

在DrawingCanvasView,我有一個方法的drawRect像這樣:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
CGContextMoveToPoint(context, 0.0f, 0.0f); 
CGContextAddLineToPoint(context, 100.0f, 100.0f); 
CGContextStrokePath(context); 

而且我希望用戶單擊按鈕,並執行這一點,所以我增加了一個新的方法叫做setNeedsDisplayInRect:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor); 
CGContextMoveToPoint(context, 0.0f, 0.0f); 
CGContextAddLineToPoint(context, 200.0f, 200.0f); 
CGContextStrokePath(context); 

但我不能叫,在我updateDrawingCanvas方法,它的工作升ike this:

- (void)updateDrawingCanvas: (id) sender{ 
NSLog(@"loaded"); 
[DrawingCanvasView setNeedsDisplayInRect:UIGraphicsGetCurrentContext()]; 
} 

這是我的邏輯/概念嗎?或者我做錯了什麼,thx。

回答

3

不,您不覆蓋setNeedsDisplayInRect:。您在drawRect:中實施繪圖代碼,當您調用setNeedsDisplayInRect:時,框架將確保您的drawRect:被調用。

+0

我可以繪製Rect:,但我無法更新視圖......系統會再次調用drawRect,如果我調用\t [DrawingCanvasView setNeedsDisplay];再次? – Tattat 2010-04-05 07:18:50

+1

你是什麼意思的「我可以drawRect:」?你不應該調用'drawRect:'。 – 2010-04-05 07:23:31

+0

所以,我應該盡一切努力繪製drawRect :,但我無法直接調用drawRect:? – Tattat 2010-04-05 07:27:05