强制UIView立即重绘,而不是在下一个运行循环期间重绘

时间:2010-05-13 22:54:13

标签: iphone uiview

我创建了一个UIImagePicker / camera视图,带有工具栏和用于拍摄快照的自定义按钮。由于自定义按钮,我无法真正更改为使用默认方式,而且我正在绘制视图的顶部。

当你点击按钮时,我想使用UIGetScreenImage()获取截图;但是,即使我先隐藏它,工具栏也会显示在图像中:

//hide the toolbar
self.toolbar.hidden = YES; 

// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();

我很确定这是因为即使工具栏被隐藏,一旦函数返回它就会被重绘,我们进入下一个运行循环 - 在调用UIGetScreenImage之后。

我尝试进行以下添加,但没有帮助:

//hide the toolbar
self.toolbar.hidden = YES; 
[self.toolbar drawRect:CGRectMake(0, 0, 320, 52)];

// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();

我也尝试过使用setNeedsDisplay,但这也不起作用,因为在当前函数返回后再次进行绘制。

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:8)

更新在运行循环中完成。

只需添加:

  

self.toolbar.hidden = YES;

     

[[NSRunLoop currentRunLoop]   runUntilDate:[NSDate   dateWithTimeIntervalSinceNow:0.01]];

     

CGImageRef screenCap =   UIGetScreenImage();

答案 1 :(得分:3)

尝试将UI元素隐藏在单独的选择器中,并使用-performSelectorOnMainThread:withObject:waitUntilDone:方法,使用YES作为waitUntilDone参数。然后使用另一个选择器进行屏幕捕获。