我使用2013年WWDC的其中一个应用程序中提供的UIImage + ImageEffects.h示例代码将模糊应用于我的应用的各个部分。它运行良好,我可以重新创建iOS7效果任何UIImage。
但是,我想重新创建UINavigationBar模糊透明度的效果,但使用我选择的任何视图。与下面显示的屏幕截图类似。
例如,假设我有一个占据屏幕一半的UITableView。我还有一个UIImageView背景作为它背后的独立视图占据了整个屏幕。我只想模糊UIImageView背景,只是在tableview下的屏幕部分。
这是我的问题。如何通过显示UIView背后的任何内容的“屏幕截图”来创建创建UIImage?这甚至可能吗?
谢谢!
这是我的屏幕层次结构。没什么复杂的。我希望“模糊图像视图”包含“图像视图”部分的模糊图像,该图像作为层次结构中的主要UIImageView。
答案 0 :(得分:2)
如果你只在iOS7上进行deploing,你可以使用比-renderInContext
快很多的新api,并使用从视图中获取的图像上的ImageEffects类别。在UIView
@interface UIView (RenderView)
- (UIImage *) imageByRenderingView;
- (UIImage *) imageByRenderingViewOpaque:(BOOL) yesOrNO;
@end
@implementation UIView (RenderView)
- (UIImage *) imageByRenderingViewOpaque:(BOOL) yesOrNO {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, yesOrNO, 0);
if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
}
else {
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}
- (UIImage *) imageByRenderingView{
return [self imageByRenderingViewOpaque:NO];
}
此片段对于低于iOS7的系统也是一个UIView类别。它会在视图及其子视图上显示图像。
答案 1 :(得分:0)
使用下面的iOS代码< 7
#import <QuartzCore/QuartzCore.h>
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}