2010-06-03 69 views
0

有沒有辦法從drawRect:退出而不刷新當前的UIView? 例如:回滾drawRect:

- (void)drawRect:(CGRect)rect { 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextSetLineWidth(context, 2); 

CGContextMoveToPoint(context, 10.0, 30.0); 
CGContextAddLineToPoint(context, 310.0, 30.0); 
CGContextStrokePath(context); 


//I would like to return from here and rollback all changes in drawRect: 

} 

謝謝!

+0

不,你不能。如果你解釋爲什麼你想這樣做,也許有人可以提供一個替代解決方案。 – 2010-06-03 10:10:07

+0

這是一個地圖應用程序。當用戶移動地圖時,一個新的線程(讓我們稱之爲thread1)開始重畫屏幕。然後用戶再次移動地圖,現在thread2(最新的線程)必須重繪地圖。但是,如果thread1沒有完成繪圖,屏幕會快速「塑造」thread1的圖像。所以最好是回滾thread1的drawRect:方法並繪製thread2的圖像。 – fic 2010-06-03 11:46:39

+1

這聽起來很奇怪。你不能重畫屏幕超過50fps。爲了讓gui響應,drawrect所花費的時間應小於1/50秒。如果您的繪圖花費的時間更長,這聽起來像需要在後臺線程中繪製紋理,並且準備好後,以直方式將其投影到屏幕上(這將花費少於1/50秒)。您的問題然後成爲如何取消後臺線程並開始一個新的。 – hooleyhoop 2010-06-03 12:11:25

回答

0

如果您尚未開始繪製上下文,則可能僅從drawRect:返回。您必須先將視圖的clearsContextBeforeDrawing屬性設置爲NO。

在開始繪製上下文後,視圖/圖層將始終更新其內容。

+0

感謝您的回答。 – fic 2010-06-03 11:32:23