我相信 NDA 已经关闭,所以我可以问这个问题。我有一个 UIView 子类:
BlurView *blurredView = ((BlurView *)[self.view snapshotViewAfterScreenUpdates:NO]);
blurredView.frame = self.view.frame;
[self.view addSubview:blurredView];
到目前为止,它在捕获屏幕方面完成了它的工作,但现在我想模糊那个视图。我该怎么做呢?从我读过的内容来看,我需要捕获视图的当前内容(上下文?!)并将其转换为 CIImage(不是?),然后对其应用 CIGaussianBlur 并将其绘制回视图。
我该怎么做?
PS 视图不是动画的,所以性能应该没问题。
编辑:这是我到目前为止所拥有的。问题是我无法将快照捕获到 UIImage,我得到一个黑屏。但是如果我直接将视图添加为子视图,我可以看到快照在那里。
// Snapshot
UIView *view = [self.view snapshotViewAfterScreenUpdates:NO];
// Convert to UIImage
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Apply the UIImage to a UIImageView
BlurView *blurredView = [[BlurView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
[self.view addSubview:blurredView];
blurredView.imageView.image = img;
// Black screen -.-
模糊视图.m:
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.imageView = [[UIImageView alloc] init];
self.imageView.frame = CGRectMake(20, 20, 200, 200);
[self addSubview:self.imageView];
}
return self;
}