在截取屏幕截图之前隐藏UIButton

时间:2011-02-28 15:54:36

标签: iphone ios ios4

我需要截取该应用的截图。有一个按钮可以触发它,但我不希望按钮显示在屏幕截图中。

我有以下代码:

- (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;
}

但按钮仍会出现在屏幕截图中。我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为您在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删除按钮后截取屏幕截图。

答案 1 :(得分:0)

您可以设置在隐藏按钮后触发的计时器,即:

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

然后将屏幕捕获代码移动到 captureScreenshot 方法。

还有一件事:UIGetScreenImage()是一个未记录的方法调用,使用它可能会导致您的应用程序被拒绝。您应该使用CALayer的 renderInContext: 方法 - 请参阅this StackOverflow post作为示例。