如何在ios中不加载屏幕的情况下拍摄viewcontroller的快照?

在我的iPAD应用程序中,我有两个视图控制器,第一个视图控制器有一个button,当我点击那个button时,我想获得第二个视图控制器快照 ,而不需要在iPAD屏幕中加载第二个视图控制器。 如果我加载viewcontroler,然后采取快照,那么它正在工作,但我的要求是做同样没有加载viewcontroler在屏幕上。 请提供想法或链接或代码片段。

试试这个: – 制作你想要拍摄的VC实例,然后用这个方法传递对象。

+ (UIImage *)renderImageFromView:(UIView *)view withRect:(CGRect)frame { // Create a new context the size of the frame UIGraphicsBeginImageContextWithOptions(frame.size, YES, 0); CGContextRef context = UIGraphicsGetCurrentContext(); // Render the view [view.layer renderInContext:context]; //[view drawRect:frame]; // Get the image from the context UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext(); // Cleanup the context you created UIGraphicsEndImageContext(); return renderedImage; } 

这个解决scheme是基于Dheeraj Kumar的回答,但是如果你的视图也包含SpriteKit的内容的话,这个方法就行了。 不过,它需要iOS7。

Swift中的代码,带有SpriteKit视图的ViewController,

 private func takeScreenshot() -> UIImage? { UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.mainScreen().scale) view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } 

不是问题的一部分,但你可以很容易地分享你的截图,

  if let image = screenshot as? AnyObject { let activity = UIActivityViewController(activityItems: [image], applicationActivities: nil) self.presentViewController(activity, animated: true, completion: nil) } 

只是实例化你的第二个视图控制器,并采取截图,如:

 - (void)foo { UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"secondVC"]; UIImage *screenShot = [self imageFromView:vc.view]; // Do something with screenShot } - (UIImage *)imageFromView:(UIView *) view { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, [[UIScreen mainScreen] scale]); } else { UIGraphicsBeginImageContext(view.frame.size); } [view.layer renderInContext: UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }