【发布时间】:2025-12-09 14:15:01
【问题描述】:
我能够截取整个网页的屏幕截图(包括屏幕外内容)。这在模拟器上运行良好,但在设备上却崩溃了。请帮助我,检查下面的代码(browserView 是 UIWebview)。
UIImage *screenImage=[[UIImage alloc] init];
UIScrollView *browserScrollableView=[[UIScrollView alloc] init];
browserScrollableView=browserView.scrollView;
UIGraphicsBeginImageContext(browserScrollableView.contentSize);
CGPoint savedContentOffset = browserScrollableView.contentOffset;
CGRect savedFrame = browserScrollableView.frame;
browserScrollableView.contentOffset = CGPointZero;
browserScrollableView.frame = CGRectMake(0, 0, browserScrollableView.contentSize.width, browserScrollableView.contentSize.height);
[browserScrollableView.layer renderInContext: UIGraphicsGetCurrentContext()];
screenImage = UIGraphicsGetImageFromCurrentImageContext();
browserScrollableView.contentOffset = savedContentOffset;
browserScrollableView.frame = savedFrame;
UIGraphicsEndImageContext();
NSLog(@"Captured image size is %f X %f",screenImage.size.width,screenImage.size.height);
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);
【问题讨论】:
-
@AnkitGupta 谢谢。此解决方案不适用于所有情况,因为所有网站的设计都不相同。如果网页没有body标签并且基于一些js加载,那么这将不起作用(如果我没记错的话)
-
是的,Anil,你说得对,我没有使用它,但我试图解决你的问题,它适用于你的情况吗??
-
@AnkitGupta 我没有使用任何特定的网站/页面。理想情况下,我的屏幕截图应该适用于所有类型的页面。我的代码在模拟器上完美运行,我不明白为什么它在设备上崩溃??? :(
-
与您的问题没有直接关系,但您最好将
UIGraphicsBeginImageContext(browserScrollableView.contentSize);替换为UIGraphicsBeginImageContextWithOptions(browserScrollableView.contentSize, NO, 0.0);请参阅:UIKit Function Reference。另外:如果您在后台线程上调用它,这可能是崩溃的原因。
标签: ios cocoa-touch uiwebview uikit