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