我搜索了很多,但只找到两种方法来拍摄UIView的屏幕截图。
第一个renderInContext:
我以某种方式使用它
CGContextRef context = [self createBitmapContextOfSize:CGSizeMake(nImageWidth, nImageHeight)];
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, nImageHeight);
CGContextConcatCTM(context, flipVertical);
[self.layer setBackgroundColor:[UIColor clearColor].CGColor];
[self.layer renderInContext:context];
CGImageRef cgImage = CGBitmapContextCreateImage(context);
UIImage* background = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);
我用作
的第二个drawViewHierarchyInRect:
UIImage *background = nil;
UIGraphicsBeginImageContextWithOptions (self.bounds.size, NO, self.window.screen.scale);
if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])
{
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
}
background = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我知道第二个比第一个更快,因为视图尺寸较小,所以它适用于iPhone。但是当我从iPad上捕捉时,视频变得生涩。 可以任何身体告诉我更快的拍摄屏幕的方法。 任何帮助将受到高度赞赏
答案 0 :(得分:3)
关于性能,Apple Docs说明如下:
除了-drawViewHierarchyInRect:afterScreenUpdates:,UIView 现在提供另外两个快照相关的方法, -snapshotViewAfterScreenUpdates:和-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:。 UIScreen还有-snapshotViewAfterScreenUpdates:。
与UIView的-drawViewHierarchyInRect:afterScreenUpdates:不同,这些 方法返回一个UIView对象。如果您正在寻找新的快照 查看,使用其中之一 这些方法。 这比打电话更有效率 -drawViewHierarchyInRect:afterScreenUpdates:自己将视图内容渲染为位图图像。您可以使用返回的视图 作为应用中当前视图/屏幕的可视化替身。对于 例如,您可以将快照视图用于更新a的动画 大视图层次结构可能很昂贵。
答案 1 :(得分:3)
拍摄快照的第三种方法比其中任何一种快得多,但它会返回UIView
。
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
如果您只是将快照用作背景"图像"等等...然后我改用它。
但是,这仅适用于iOS8。
使用它只是做...
UIView *snapshotView = [someView snapshotViewAfterScreenUpdates:YES];
答案 2 :(得分:2)
此方法将返回特定视图的快照图像
-(UIImage *)createSnapShotImagesFromUIview
{
UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width,view.frame.size.height));
CGContextRef context = UIGraphicsGetCurrentContext();
[mapView.layer renderInContext:context];
UIImage *img_screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img_screenShot;
}