繁体   English   中英

iOS制作全屏问题的屏幕截图

[英]iOS make screenshot of entire screen issue

我有图像视图的自我看法:

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部件的内容。

一些方法和图像类别在这里找到。

您已经创建了一个模糊循环。 当您第二次获取视图的屏幕截图时,blurredImageView也在屏幕截图中。 这就是为什么您看到效果成倍增长的原因。 尝试删除它,只捕获没有效果的上下文,然后将其重新添加

 - (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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM