我有一个 UIView 和一个 UITableView,在键盘下方延伸。表格 View 中的内容足够亮,清楚地表明内容位于键盘后面。我正在尝试截取整个 View 的屏幕截图,以便使用以下代码对其进行模糊处理:
- (UIImage *)screenshotFromView:(UIView *)view;
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
但是,返回的图像不会创建透明键盘。从非模糊 View 到模糊 View 时,这会出现奇怪的过渡,因为在过渡到模糊图像之前,键盘后面显然有内容。
是否可以在不使用私有(private)API的情况下截取整个屏幕,同时仍然保持键盘+状态栏的透明度?
最佳答案
这些天我遇到了和你一样的问题,所以我很清楚你想要什么。我希望整个用户界面在包括键盘在内的消息后面模糊,这不包含在任何常规屏幕截图方法中。我的治疗方法是以下代码:
- (UIImage*)screenShotWithKeyboard:(UIView *)viewToShoot
{
UIWindow *keyboard = nil;
for (UIWindow *window in [[UIApplication sharedApplication] windows])
{
if ([[window description] hasPrefix:@"<UITextEffectsWin"])
{
keyboard = window;
break;
}
}
// Define the dimensions of the screenshot you want to take (the entire screen in this case)
CGSize size = [[UIScreen mainScreen] bounds].size;
// Create the screenshot
UIGraphicsBeginImageContext(size);
CGContextRef context=UIGraphicsGetCurrentContext();
// delete following line if you only want the keyboard
[[viewToShoot layer] renderInContext:context];
if(keyboard!=nil)
[[keyboard layer] renderInContext:context];
UIImage *screenImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenImg;
}
我从 Aran Balkan 的一篇文章中得到了这个想法。我将其分解为一种方法并针对 iOS 7 进行了测试,这似乎对我有用。这篇文章值得一读,因为他解释了一些背后的技巧。因为你只想要实际的键盘作为图像,你可以注释掉我在代码中标记的行。使用该图像键盘,您可以自己进行模糊处理。 代码远非完美,但我认为您明白了。
最后有两个想法: 我是 Objective C 和 iOS 开发的新手。如果您发现任何有问题的错误,非常欢迎发表评论以改进此答案。 其次,我今天在我的应用程序中编写了这段代码,我还不知道我是否违反了 iOS 的任何开发者规则。目前我没有发现任何问题,但我会进一步调查这个问题,因为我想发布带有该图形技巧的应用程序。我会保持这篇文章的更新。在此之前,与第一点一样,我将非常感谢有关此问题的任何评论。
关于ios - 模糊包含键盘及其下方内容的 UIView (iOS 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19616051/