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

Iphone 强制UIView立即重新绘制,而不是在下一次运行循环期间,iphone,uiview,Iphone,Uiview,我已经创建了一个UIImagePicker/camera视图,带有一个工具栏和用于拍摄快照的自定义按钮。由于自定义按钮的原因,我无法真正改为使用默认方式,我正在视图顶部绘制 当你按下按钮时,我想用UIGetScreenImage()截图;但是,即使我先将工具栏隐藏,它仍会显示在图像中: //hide the toolbar self.toolbar.hidden = YES; // capture the screen pixels CGImageRef screenCap = UIGetS

我已经创建了一个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,但这也不起作用,因为在当前函数返回后会再次进行绘制


有什么建议吗?谢谢

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

更新在运行循环中完成

只需添加:

self.toolbar.hidden=是

[[nsrunlop currentRunLoop] runUntilDate:[NSDate DateWithTimeIntervalencesInnow:0.01]]

CGImageRef屏幕盖= UIGetScreenImage()


单凭这一点并不能做到这一点,但一个小的增加使它起作用。我用[self-performSelector:@selector(captureScreen)with-Object:nil afterDelay:0]调用了屏幕捕获选择器;这就完成了任务。谢谢你的领导![自执行选择器:@selector(captureScreen),对象:nil afterDelay:0];实际上使“captureScreen”在下一个运行循环中运行。感谢Antoine,这就完成了任务,而且实现起来更简单。