我有一个带有UITableView的UIView,它位于键盘下方。表格视图中的内容足够明亮,清楚地表明内容位于键盘后面。我正在尝试截取整个视图的屏幕截图,以便使用以下代码将其模糊:
- (UIImage *)screenshotFromView:(UIView *)view;
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
但是,返回的图像不会创建透明键盘。当从非模糊视图进入模糊视图时,这呈现出奇怪的过渡,因为在转换到模糊图像之前键盘后面有明显的内容。
是否可以在不使用私有API的情况下拍摄整个屏幕的屏幕截图,同时仍然保持键盘的透明度+状态栏?
答案 0 :(得分:2)
这些天我遇到了确切的问题,所以我完全知道你想要什么。我希望整个用户界面模糊在包括键盘在内的消息后面,这不包括在任何常规的截屏方法中。我的解决方法是以下代码:
- (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的任何开发人员规则,我还不知道。目前我没有看到任何问题,但我会进一步调查,因为我想用这个图形技巧发布我的应用程序。我会更新这篇文章。与第一点一样,我非常感谢有关此问题的任何评论。
答案 1 :(得分:0)
您是否考虑过使用UIKeyboardAppearanceDark
?目前,keyboardAppearance
的默认值对应UIKeyboardAppearanceLight
,因此可能不适合您的使用案例。