2010-06-03 70 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