2011-02-28 88 views
0

我需要截取應用程序的截圖。有一個按鈕可以觸發它,但我不希望該按鈕出現在屏幕截圖中。在截圖前隱藏UIButton

我有以下代碼:

- (IBAction) takePicture:(id) sender { 
    button.hidden = YES; 

    CGImageRef screen = UIGetScreenImage(); 
    UIImage* image = [UIImage imageWithCGImage:screen]; 
    CGImageRelease(screen); 

    // Save the captured image to photo album 
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
    button.hidden = NO; 
} 

但按鈕仍顯示在屏幕截圖。我究竟做錯了什麼?

回答

3

我想你捕獲屏幕前的runloop可以刷新視圖(它可以隱藏按鈕,即前)

你應該嘗試改變你的代碼是這樣的:

- (IBAction) takePicture:(id) sender { 
    button.hidden = YES; 
    [self performSelector:@selector(takeScreenShot) withObject:nil afterDelay:0.1];      
} 

- (void)takeScreenShot { 
    CGImageRef screen = UIGetScreenImage(); 
    UIImage* image = [UIImage imageWithCGImage:screen]; 
    CGImageRelease(screen); 

    // Save the captured image to photo album 
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
    button.hidden = NO; 

} 

這在runloop移除你的按鈕後應該截取屏幕截圖。

+0

謝謝!這工作完美 – egze 2011-02-28 16:03:52

0

您可以設置一個計時器按鈕後火被隱藏,即:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(captureScreenshot) userInfo:nil repeats:NO]; 

,然後在屏幕捕捉代碼移到你的captureScreenshot方法。

還有一件事:UIGetScreenImage()是一個未記錄的方法調用,使用它可能會導致您的應用程序被拒絕。您應該改爲使用CALayer的renderInContext:方法 - 請參閱this StackOverflow post的示例。

+0

嗨。謝謝,我知道關於UIGetScreenImage。只需要快速建立原型。不會成爲已發佈的應用程序。 – egze 2011-02-28 16:25:36