2010-05-13 24 views
9

我創建了一個UIImagePicker/camera視圖,帶有用於拍攝快照的工具欄和自定義按鈕。由於自定義按鈕,我無法真正改變爲使用默認方式,而且我正在繪製視圖頂部。當你點擊按鈕時,我想用UIGetScreenImage()截取屏幕截圖;然而,該工具欄顯示出來的圖像,即使我先隱藏:強制UIView立即重畫,而不是在下次運行循環中

//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嘗試過,但不起作用要麼是因爲當前函數返回後再次平局發生。

有什麼建議嗎?謝謝!

回答

3

嘗試隱藏UI元素在單獨的選擇器,以及使用該-performSelectorOnMainThread:withObject:waitUntilDone:方法,使用YESwaitUntilDone參數。然後用另一個選擇器進行屏幕截圖。

+0

這一項並沒有這樣做,但一個小小的補充讓它工作。我用[self performSelector:@selector(captureScreen)withObject:nil afterDelay:0]調用截屏選擇器;並完成了工作。感謝領先! – 2010-05-14 15:06:51

+0

[self performSelector:@selector(captureScreen)withObject:nil afterDelay:0];實際上使「captureScreen」在下一次運行循環中運行。 – 2011-09-15 12:44:11

8

更新在運行循環中完成。

只需添加:

self.toolbar.hidden = YES;

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

CGImageRef screenCap = UIGetScreenImage();

+0

這個工作很簡單,實施起來很簡單,謝謝Antoine。 – 2012-08-18 02:26:10