我创建了一个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,但这也不起作用,因为在当前函数返回后再次进行绘制。
有什么建议吗?谢谢!
答案 0 :(得分:8)
更新在运行循环中完成。
只需添加:
self.toolbar.hidden = YES;
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
CGImageRef screenCap = UIGetScreenImage();
答案 1 :(得分:3)
尝试将UI元素隐藏在单独的选择器中,并使用-performSelectorOnMainThread:withObject:waitUntilDone:
方法,使用YES
作为waitUntilDone
参数。然后使用另一个选择器进行屏幕捕获。