截图最顶layer/view

Screenshot the top most layer/view

我有一个 UIView,其中包含另一个 UIViewUIImage

    dView=[[drawView alloc]initWithFrame:myUIView.frame];
    [dView newMaskWithColor:[UIColor colorWithPatternImage:chosenImage]];
    [myUIView addSubview:dView];

并且通过使用this代码,我删除了一部分,现在看起来像这样:

现在我在这个视图后面添加了一个layer,并在layer中呈现了另一个image

 [myUIView.layer insertSublayer:_videoPreviewLayer below:dView.layer];

现在看起来像这样:(这是在设备上手动截取的屏幕截图)

当我尝试以编程方式截取上述视图时,结果是

不知道为什么新添加的videopreview层没有出现screenshot.Here是我的截图方法

-(void)takeSnapShot{

 UIView *topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];  //tried this too

//capture the screenshot of the uiimageview and save it in camera roll
UIGraphicsBeginImageContext(self.myUIView.frame.size);
[self.myUIView.layer renderInContext:UIGraphicsGetCurrentContext()]; // tried this
[self.dView.layer renderInContext:UIGraphicsGetCurrentContext()];   //tried this
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];   //tried this
[topView.layer renderInContext:UIGraphicsGetCurrentContext()];   //tried this
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

}

我在单击视图控制器中的按钮时调用此方法。

我什至尝试捕获此 answer 建议的 window,但我仍然没有得到手动截屏的结果。

有什么方法可以捕获显示给用户的最上面的视图吗?

看看这个 post:Why don't added sublayers show up in screenshot?

似乎子层未由 renderInContext 方法处理。

当您想截取屏幕截图时,尝试将来自预览层的帧存储在 UIImageView 中,然后您应该能够手动将该帧放在遮罩下方,然后只截取超级视图。