2014-07-18 39 views
5

在我的iPAD應用程序中,我有兩個視圖控制器,第一個視圖控制器有一個按鈕,當我點擊該按鈕時,我不想在iPAD屏幕中加載第二個視圖控制器,我想獲得第二個視圖控制器的快照。 如果我加載viewcontroler,然後採取快照,那麼它正在工作,但我的要求是做同樣沒有加載viewcontroler在屏幕上。 請給點子或鏈接或代碼片段。如何在ios中不加載屏幕的情況下拍攝viewcontroller的快照?

+0

怎麼辦爲未在視圖控制器堆棧中加載的VC拍攝快照? – Neeku

+0

你有什麼試過,沒有奏效?顯示代碼並解釋它做錯了什麼。 – Wain

+1

我想如果我做VC的實例,然後一些如何有辦法拍快照.. –

回答

9

試試這個: - 製作你想要拍攝的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; 
} 
+0

這很好,但它不起作用,如果你在你的視圖中使用SpriteKit。 – endavid

0

只是實例化你的第二個視圖控制器,並採取截圖,如:

- (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; 
} 
2

該解決方案基於達拉傑·庫馬爾的答案,但如果你的視圖包含SpriteKit內容以及這會工作。不過,它需要iOS7。你想

在斯威夫特的代碼,與SpriteKit視圖的視圖控制器,問題的

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) 
    } 
相關問題