2014-07-18 3 views
5

मेरे आईपैड एप्लिकेशन में, मेरे पास दो व्यू कंट्रोलर हैं, पहले व्यू कंट्रोलर के पास एक बटन है, मैं दूसरे व्यू कंट्रोलर का स्नैपशॉट प्राप्त करना चाहता हूं, जब मैं उस बटन पर क्लिक करता हूं, आईपैड स्क्रीन में दूसरा व्यू कंट्रोलर लोड किए बिना। यदि मैं व्यू कंट्रोलर लोड करता हूं और फिर स्नैपशॉट लेता है तो यह काम कर रहा है लेकिन स्क्रीन पर व्यू कंट्रोलर लोड किए बिना मेरी आवश्यकता है। कृपया विचार या लिंक या कोड स्निपेट दें।आईओएस में स्क्रीन लोड किए बिना व्यू कंट्रोलर का स्नैपशॉट कैसे लें?

+0

कैसे आप चाहते हैं एक वीसी का एक स्नैपशॉट लेने के लिए जो दृश्य नियंत्रक ढेर में लोड नहीं है, अभी तक? – Neeku

+0

आपने क्या प्रयास किया है जो काम नहीं करता है? कोड दिखाएं और समझाएं कि यह क्या गलत है। – Wain

+1

मुझे लगता है कि अगर मैं वीसी का उदाहरण देता हूं और फिर कुछ स्नैपशॉट लेने का तरीका कैसे है .. –

उत्तर

9

इसे आजमाएं: - वीसी का उदाहरण बनाएं कि आप स्क्रीन शॉट लेना चाहते हैं, और फिर ऑब्जेक्ट को इस विधि में पास करें।

+ (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

यह अच्छा है, लेकिन यदि आप अपने दृश्य में स्प्राइटकिट का उपयोग कर रहे हैं तो यह काम नहीं करता है। – 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 सामग्री के रूप में अच्छी तरह से होता है अगर यह काम करेंगे। हालांकि, आईओएस 7 की आवश्यकता है।

स्विफ्ट में कोड, 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) 
    } 
संबंधित मुद्दे