模糊包含键盘及其下方内容的 UIView (iOS 7)
Posted
技术标签:
【中文标题】模糊包含键盘及其下方内容的 UIView (iOS 7)【英文标题】:Blurring a UIView that contains the keyboard with content beneath it (iOS 7) 【发布时间】:2013-10-27 08:25:55 【问题描述】:我有一个 UIView 和一个 UITableView 在键盘下方延伸。表格视图中的内容足够亮,清楚地表明内容位于键盘后面。我正在尝试截取整个视图的屏幕截图,以便使用以下代码对其进行模糊处理:
- (UIImage *)screenshotFromView:(UIView *)view;
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
但是,返回的图像不会创建透明键盘。当从非模糊视图转到模糊视图时,这会出现奇怪的过渡,因为在过渡到模糊图像之前,键盘后面有明显的内容。
是否可以在不使用私有API的情况下截取整个屏幕,同时仍然保持键盘+状态栏的透明度?
【问题讨论】:
您能否澄清一下,您想截取屏幕截图(包括键盘)以使其模糊?是否在关闭应用程序之前显示它以模糊重要信息,使其在多任务面板中不可见? 【参考方案1】:这些天我遇到了和你一样的问题,所以我很清楚你想要什么。我希望整个 UI 模糊在一条消息后面,包括键盘,这不包含在任何常规的屏幕截图方法中。我的治疗方法是以下代码:
- (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 测试它,这似乎对我有用。这篇文章值得一读,因为他稍微解释了背后的技巧。由于您只想要实际的键盘作为图像,您可以注释掉我在代码中标记的行。使用该图像键盘,您可以自己进行模糊处理。 代码远非完美,但我想你明白了。
最后有两个想法: 我是目标 c 和 iOS 开发的大一新生。如果您发现任何有问题的错误,非常欢迎发表评论以改进此答案。 其次,我今天在我的应用程序中编写了这段代码,我还不知道我是否违反了任何 iOS 开发者规则。目前我没有看到任何问题,但我会进一步调查,因为我想用那个图形技巧发布我的应用程序。我会不断更新这篇文章。在此之前,与第一点一样,我非常感谢您对此问题的任何评论。
【讨论】:
感谢您的评论马丁!虽然上面的代码捕获了键盘,但不幸的是它没有捕获键盘的透明度。因此,如果内容后面有任何类型的彩色内容,模糊过渡将继续看起来很尴尬——因为它看起来好像彩色内容在模糊过程中被移除了。 @bdev 是的,看起来我很乐意提供帮助,以至于我不了解您的真正问题。对此感到抱歉。【参考方案2】:您是否考虑过使用UIKeyboardAppearanceDark
?目前keyboardAppearance
的默认值对应UIKeyboardAppearanceLight
,因此它可能不适合您的用例。
【讨论】:
是的,我遇到的问题实际上是在使用 UIKeyboardAppearanceDark 时发生的。问题是我无法在截图过程中捕捉到键盘的透明度。以上是关于模糊包含键盘及其下方内容的 UIView (iOS 7)的主要内容,如果未能解决你的问题,请参考以下文章