2011-02-28 60 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