iOS制作整个屏幕问题的截图

Posted

技术标签:

【中文标题】iOS制作整个屏幕问题的截图【英文标题】:iOS make screenshot of entire screen issue 【发布时间】:2015-02-17 19:49:26 【问题描述】:

我有带图像视图的自我视图:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds];
[self setBluredImageView:imageView];        
[self addSubview:imageView];

- (UIImage *)takeSnapshotOfView:(UIView *)view

    CGFloat reductionFactor = 1;
    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor));
    [view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

当我想在其他视图上显示自己的视图时,我会这样做:

- (void)showMe; 


    AppDelegate* app = [AppDelegate shared];
    [app.window addSubview:self];

    UIImage *image = [self blurWithImageEffects:[self takeSnapshotOfView:app.window]];

    [[self bluredImageView] setImage:image];

    [UIView animateWithDuration:0.4 animations:^

        [self setAlpha:1.0];

    ];

如您所见,我想模糊基于主窗口视图的“图形上下文”。第一次展示自己的视图时,效果很好,但随后,像模糊图像之类的东西会相互叠加。

所以这是我第一次展示我的视图时的图像:

当我多次展示我的视图时,模糊的图像看起来像这样:

所以你可以看到每次模糊的截图都是不同的,但我使用相同的方法来获取截图并且不更新视图控制器或其他 ui 部分的内容。

找到了一些方法和图像类别here。

【问题讨论】:

你检查过以下答案吗:***.com/questions/18956611/… 还有那些:***.com/questions/2200736/… 【参考方案1】:

您创建了一个模糊循环。当你第二次截取视图的截图时,bluredImageView 也在截图中。这就是为什么你看到效果成倍增加的原因。尝试删除它并仅捕获没有效果的上下文,然后将其添加回来

 - (UIImage *)takeSnapshotOfView:(UIView *)view

    //Remove the blured image before taking another screenshot.
    [self bluredImageView] removeFromSuperview];
    CGFloat reductionFactor = 1;

    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor));
    [view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    //Add it back now that the effect is done
    [self addSubview:[self bluredImageView];
    return image;

【讨论】:

以上是关于iOS制作整个屏幕问题的截图的主要内容,如果未能解决你的问题,请参考以下文章

整个屏幕的 Swift iOS 屏幕截图,包括拆分视图

如何在 iOS 中从 MTKView 制作屏幕截图?

尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS

以编程方式截取 iOS 中另一个应用程序的整个可滚动区域的屏幕截图

我需要我没有的设备的 iOS 屏幕截图

iOS - 以编程方式截取跳板(主屏幕)的屏幕截图