我需要截取该应用的截图。有一个按钮可以触发它,但我不希望按钮显示在屏幕截图中。
我有以下代码:
- (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;
}
但按钮仍会出现在屏幕截图中。我做错了什么?
答案 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作为示例。