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

Jus*_*ent 9 iphone uiview

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

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

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

// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();
Run Code Online (Sandbox Code Playgroud)

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

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

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

// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();
Run Code Online (Sandbox Code Playgroud)

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

有什么建议?谢谢!

Ant*_*set 8

更新在运行循环中完成.

只需添加:

self.toolbar.hidden = YES;

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

CGImageRef screenCap = UIGetScreenImage();


Ale*_*lds 3

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