截图最顶层/视图

时间:2015-10-20 16:20:02

标签: ios objective-c uiview screenshot layer

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

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

通过使用this代码,我删除了它的一部分,现在看起来像这样: enter image description here

现在我在此视图后面添加了layer,并在image中显示了另一个layer

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

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

enter image description here

当我尝试以编程方式截取上述视图时,结果为enter image description here

我不知道为什么新增加的videopreview图层没有出现在屏幕截图中。这是我的截图方法。

-(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建议的窗口,但我仍然没有得到手动屏幕截图的结果。

有没有办法捕获向用户显示的最顶层视图?

1 个答案:

答案 0 :(得分:1)

查看此帖子:Why don't added sublayers show up in screenshot?

似乎子图层不是由renderInContext方法处理的。

如果要捕获屏幕截图,请尝试在UIImageView中存储预览图层中的帧,然后您应该能够手动将该帧放在屏幕下方并截取超视图。